frontStudy---JavaScript

    技术2022-07-11  92

    frontStudy ---- JavaScript

    1 JavaScript 简介

    1.1 JavaScript 简介

    JavaScript 是一种轻量级的编程语言。

    JavaScript 是可插入 HTML 页面的编程代码。

    JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

    JavaScript 很容易学习。

    由浏览器解释执行,会涉及到浏览器的兼容性问题。

    1.2 JavaScript 能做什么

    直接写入 HTML 输出流对事件的反应改变html的内容改变html的样式表单输入验证…

    1.3 怎么使用

    在html页面中直接使用 。如需在 HTML 页面中插入 JavaScript,请使用 <script> alert("我的第一个 JavaScript"); </script> 也可以把脚本保存到外部文件中。外部文件通常包含被多个网页使用的代码。外部 JavaScript 文件的文件扩展名是 .js。如需使用外部文件,请在 <!DOCTYPE html> <html> <body> <script src="myScript.js"></script> </body> </html>

    2 JavaScript输出

    JavaScript 可以通过不同的方式来输出数据:

    使用 window.alert() 弹出警告框。使用 document.write() 方法将内容写到 HTML 文档中。使用 innerHTML 写入到 HTML 元素。使用 console.log() 写入到浏览器的控制台。

    3 JavaScript注释

    单行注释 // 注释文本 多行注释 /* 注释文本 */

    4 JavaScript变量

    var 变量名; // 声明无值的变量。未使用值来声明的变量,其值实际上是 undefined。

    4.1 JavaScript变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

    以下代码是可以正常运行的。

    x = 5; // 变量 x 设置为 5 elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x; // 在元素中显示 x var x; // 声明 x

    下面的代码y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y 变量是一个未定义的变量。

    var x = 5; // 初始化 x elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x + " " + y; // 显示 x 和 y var y = 7; // 初始化 y

    4.2 Undefined 和 Null

    可以通过将变量的值设置为 null 来清空变量。

    在 JavaScript 中 null 表示 “什么都没有”。null是一个只有一个值的特殊类型。表示一个空对象引用。

    用 typeof 检测 null 返回是object。

    在 JavaScript 中, undefined 是一个没有设置值的变量。

    typeof 一个没有值的变量会返回 undefined。

    null 和 undefined 的值相等,但类型不等

    typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true

    4.3 变量类型

    局部JavaScript变量

    在 JavaScript function内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。

    全局JavaScript变量

    在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。全局变量会在页面关闭后被删除。全局变量属于windows对象。

    4.4 FAQ:

    JavaScript 只有声明的变量会提升,初始化的不会。JavaScript 严格模式(strict mode)不允许使用未声明的变量。全局变量,或者函数,可以覆盖 window 对象的变量或者函数。局部变量,包括 window 对象可以覆盖全局变量和函数。

    5 JavaScript数据类型

    5.1 对象(Object)

    var person={firstname:"John", lastname:"Doe", id:5566}; 访问对象属性: 1.person.lastName; 2.person["lastName"];

    5.2 数组(Array)

    var cars=["Saab","Volvo","BMW"];

    5.3 函数(Function)

    var a = function (){ // body }

    5.4 字符串(String)

    var str = 'string'; /* JavaScript 字符串是原始值,可以使用字符创建: var firstName = "John" 但我们也可以使用 new 关键字将字符串定义为一个对象: var firstName = new String("John") 不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用 比如: var x = "John"; var y = new String("John"); (x === y) // 结果为 false,因为 x 是字符串,y 是对象 */

    字符串属性

    属性描述constructor返回创建字符串属性的函数length返回字符串的长度prototype允许您向对象添加属性和方法

    字符串方法

    方法描述charAt()返回指定索引位置的字符charCodeAt()返回指定索引位置字符的 Unicode 值concat()连接两个或多个字符串,返回连接后的字符串fromCharCode()将 Unicode 转换为字符串indexOf()返回字符串中检索指定字符第一次出现的位置lastIndexOf()返回字符串中检索指定字符最后一次出现的位置localeCompare()用本地特定的顺序来比较两个字符串match()找到一个或多个正则表达式的匹配replace()替换与正则表达式匹配的子串search()检索与正则表达式相匹配的值slice()提取字符串的片断,并在新的字符串中返回被提取的部分split()把字符串分割为子字符串数组substr()从起始索引号提取字符串中指定数目的字符substring()提取字符串中两个指定的索引号之间的字符toLocaleLowerCase()根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射toLocaleUpperCase()根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射toLowerCase()把字符串转换为小写toString()返回字符串对象值toUpperCase()把字符串转换为大写trim()移除字符串首尾空白valueOf()返回某个字符串对象的原始值

    FAQ:

    两个数字相加,返回数字相加的和,如果数字与字符串相加,返回字符串+ 运算符用于把文本值或字符串变量加起来(连接起来)

    5.5 数字(Number)

    var a = 10;

    5.6 布尔(Boolean)

    var a = false; var a = true;

    如果布尔对象无初始值或者其值为:

    0-0null“”falseundefinedNaN

    那么对象的值为 false。否则,其值为 true(即使当变量值为字符串 “false” 时)!

    5.7 空(Null)

    5.8 未定义(Undefined)

    5.9 Symbol(Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)

    6 JavaScript比较和逻辑运算符

    6.1 比较运算符

    == 值是否相等=== 绝对等于(值和类型均相等)!= 不等于大于 >小于 <大于等于 >=小于等于 <=!val 等价于 (val != ‘’ && val != null && val != undefind)

    6.2 逻辑运算符

    运算符描述例子&&and(x < 10 && y > 1) 为 true||or(x5 || y5) 为 false!not!(x==y) 为 true

    三目运算符:variablename=(condition)?value1:value2

    7 条件语句

    JavaScript 中,我们可使用以下条件语句:

    if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if (condition) { 当条件为 true 时执行的代码 } if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if (condition) { 当条件为 true 时执行的代码 } else { 当条件不为 true 时执行的代码 } if…else if…else 语句- 使用该语句来选择多个代码块之一来执行 if (condition1) { 当条件 1true 时执行的代码 } else if (condition2) { 当条件 2true 时执行的代码 } else { 当条件 1 和 条件 2 都不为 true 时执行的代码 } switch 语句 - 使用该语句来选择多个代码块之一来执行 /* 工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。*/ switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default:case 1case 2 不同时执行的代码 }

    8 JavaScript循环

    JavaScript 支持不同类型的循环:

    for - 循环代码块一定的次数 for (var i=0; i<5; i++) { x=x + "该数字为 " + i + "<br>"; } for/in - 循环遍历对象的属性 var person={fname:"John",lname:"Doe",age:25}; for (x in person) // x 为属性名 { txt=txt + person[x]; } while - 当指定的条件为 true 时循环指定的代码块 while (i<5) { x=x + "The number is " + i + "<br>"; i++; } // 如果您忘记增加条件中所用变量的值,该循环永远不会结束。这可能导致浏览器崩溃。 do/while - 同样当指定的条件为 true 时循环指定的代码块 do { x=x + "The number is " + i + "<br>"; i++; } while (i<5); // 该循环至少会执行一次,即使条件为 false 它也会执行一次,因为代码块会在条件被测试前执行 // 别忘记增加条件中所用变量的值,否则循环永远不会结束!这可能导致浏览器崩溃。

    break

    break 语句可用于跳出循环。

    continue

    continue 语句跳出本次循环,会继续执行下一次循环(如果有的话)

    9 typeof & instanceof

    9.1 typeof

    // 可以使用 typeof 操作符来检测变量的数据类型。 typeof "John" // 返回 string typeof 3.14 // 返回 number typeof false // 返回 boolean typeof [1,2,3,4] // 返回 object typeof {name:'John', age:34} // 返回 object

    9.2 instanceof

    var a = ['aaa','bbb','ccc']; a instanceof Object // true a instanceof Array // true // 在JavaScript中, typeof关键字无法区分Array Object,可以使用instanceof

    10 JavaScript类型转换

    JavaScript 变量可以转换为新变量或其他数据类型:

    通过使用 JavaScript 函数通过 JavaScript 自身自动转换

    Number Date Boolean —> String:

    toString()val + ‘’;String()

    String ----> Number:

    Number(“3.14”) // 返回 3.14Number(" ") // 返回 0Number("") // 返回 0Number(“99 88”) // 返回 NaNparseFloat()parseInt()

    FAQ:

    NaN 的数据类型是 number数组(Array)的数据类型是 object日期(Date)的数据类型为 objectnull 的数据类型是 object未定义变量的数据类型为 undefined

    11 JavaScript严格模式

    “use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。“use strict” 的目的是指定代码在严格条件下执行。严格模式下你不能使用未声明的变量。不允许删除变量或对象。不允许删除函数。不允许变量重名。不允许使用八进制。不允许使用转义字符。不允许对只读属性赋值。不允许对一个使用getter方法读取的属性进行赋值不允许删除一个不允许删除的属性。变量名不能使用 “eval”,“arguments” 字符串。“use strict” 指令只允许出现在脚本或函数的开头。严格模式下,this的值为undefined。

    12 JavaScript this关键字

    面向对象语言中 this 表示当前对象的一个引用。

    但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

    在方法中,this 表示该方法所属的对象。如果单独使用,this 表示全局对象。在函数中,this 表示全局对象。在函数中,在严格模式下,this 是未定义的(undefined)。在事件中,this 表示接收事件的元素。类似 call() 和 apply() 方法可以将 this 引用到任何对象。

    13 javascript:void(0) 含义

    javascript:void(0) 中最关键的是 void 关键字, void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值。

    13.1 href="#"与href="javascript:void(0)"的区别

    # 包含了一个位置信息,默认的锚是**#top** 也就是网页的上端。而javascript:void(0), 仅仅表示一个死链接。在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。如果你要定义一个死链接请使用 javascript:void(0) 。

    14 JavaScript函数

    function functionName(parameter1, parameter2, parameter3) { // 要执行的代码…… }

    14.1 通过值传递参数

    在函数中调用的参数是函数的隐式参数。

    JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。

    如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。

    隐式参数的改变在函数外是不可见的。

    14.2 通过对象传递参数

    在JavaScript中,可以引用对象的值。

    因此我们在函数内部修改对象的属性就会修改其初始的值。

    修改对象属性可作用于函数外部(全局变量)。

    修改对象属性在函数外是可见的。

    14.3 JavaScript闭包

    var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // 计数器为 3 /* 变量 add 指定了函数自我调用的返回字值。 自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。 add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。 这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。 计数器受匿名函数的作用域保护,只能通过 add 方法修改。 */ /* 闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。 直观的说就是形成一个不销毁的栈环境。 */

    15 html DOM

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。

    JavaScript 能够改变页面中的所有 HTML 元素JavaScript 能够改变页面中的所有 HTML 属性JavaScript 能够改变页面中的所有 CSS 样式JavaScript 能够对页面中的所有事件做出反应

    通过 id 查找 HTML 元素:

    var x=document.getElementById("intro");

    通过标签名查找 HTML 元素:

    var x=document.getElementById("main"); var y=x.getElementsByTagName("p");

    通过类名找到 HTML 元素:

    var x=document.getElementsByClassName("intro");

    改变HTML内容:

    document.getElementById(*id*).innerHTML=*新的 HTML*

    改变HTML属性:

    document.getElementById(*id*).*attribute=新属性值*

    改变HTML样式:

    document.getElementById(*id*).style.*property*=*新样式*

    addEventListener() 方法:

    document.getElementById("myBtn").addEventListener("click", displayDate);

    removeEventListener() 方法:

    *element*.removeEventListener("mousemove", myFunction);

    创建新的HTML元素节点:

    appendChild()

    <div id="div1"> <p id="p1">这是一个段落。</p> <p id="p2">这是另外一个段落。</p> </div> <script> var para = document.createElement("p"); var node = document.createTextNode("这是一个新的段落。"); para.appendChild(node); var element = document.getElementById("div1"); element.appendChild(para); </script>

    insertBefore()

    <div id="div1"> <p id="p1">这是一个段落。</p> <p id="p2">这是另外一个段落。</p> </div> <script> var para = document.createElement("p"); var node = document.createTextNode("这是一个新的段落。"); para.appendChild(node); var element = document.getElementById("div1"); var child = document.getElementById("p1"); element.insertBefore(para, child); </script>

    移除已经存在的元素:

    <div id="div1"> <p id="p1">这是一个段落。</p> <p id="p2">这是另外一个段落。</p> </div> <script> var parent = document.getElementById("div1"); var child = document.getElementById("p1"); parent.removeChild(child); </script>

    替换HTML元素:

    <div id="div1"> <p id="p1">这是一个段落。</p> <p id="p2">这是另外一个段落。</p> </div> <script> var para = document.createElement("p"); var node = document.createTextNode("这是一个新的段落。"); para.appendChild(node); var parent = document.getElementById("div1"); var child = document.getElementById("p1"); parent.replaceChild(para, child); </script>

    HTMLCollection 对象

    getElementsByTagName() 方法返回 HTMLCollection 对象。HTMLCollection 对象类似包含 HTML 元素的一个数组。

    集合中的元素可以通过索引(以 0 为起始位置)来访问。

    HTMLCollection 对象的 length 属性定义了集合中元素的数量。

    16 JS 浏览器BOM

    16.1 浏览器对象模型(Browser Object Model (BOM))

    所有浏览器都支持 window 对象。它表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。甚至 HTML DOM 的 document 也是 window 对象的属性之一: window.document.getElementById("header"); 与 document.getElementById("header"); 等价。

    16.2 Windows 尺寸

    对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

    window.innerHeight - 浏览器窗口的内部高度(包括滚动条)window.innerWidth - 浏览器窗口的内部宽度(包括滚动条)

    对于 Internet Explorer 8、7、6、5:

    document.documentElement.clientHeightdocument.documentElement.clientWidth

    或者

    document.body.clientHeightdocument.body.clientWidth var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var h=window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

    window的其他方法:

    window.open() - 打开新窗口window.close() - 关闭当前窗口window.moveTo() - 移动当前窗口window.resizeTo() - 调整当前窗口的尺寸

    16.3 Window Screen

    window.screen 对象包含有关用户屏幕的信息。

    window.screen对象在编写时可以不使用 window 这个前缀。

    一些属性:返回访问者屏幕的宽度,高度,以像素计,减去界面特性,比如窗口任务栏。

    screen.availWidth - 可用的屏幕宽度screen.availHeight - 可用的屏幕高度

    16.4 Window Location

    window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

    window.location 对象在编写时可不使用 window 这个前缀。 一些例子:

    location.hostname 返回 web 主机的域名location.href 返回当前页面的 URLlocation.pathname 返回当前页面的路径和文件名location.port 返回 web 主机的端口 (80 或 443)location.protocol 返回所使用的 web 协议(http: 或 https:)Location Assign()加载新的文档。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <head> <script> function newDoc(){ window.location.assign("https://www.runoob.com") } </script> </head> <body> <input type="button" value="加载新文档" onclick="newDoc()"> </body> </html> <!-- window.location.assign(url) : 加载 URL 指定的新的 HTML 文档。 就相当于一个链接,跳转到指定的url,当前页面会转为新页面内容,可以点击后退返回上一个页面。 window.location.replace(url) : 通过加载 URL 指定的文档来替换当前文档 ,这个方法是替换当前窗口页面,前后两个页面共用一个窗口,所以是没有后退返回上一页的 -->

    16.4 Window History

    window.history 对象包含浏览器的历史。

    window.history对象在编写时可不使用 window 这个前缀。为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。一些方法:

    history.back() - 与在浏览器点击后退按钮相同history.forward() - 与在浏览器中点击向前按钮相同 // history.go(param) // go() 里面的参数表示跳转页面的个数 例如 history.go(1) 表示前进一个页面; // go() 里面的参数表示跳转页面的个数 例如 history.go(-1) 表示后退一个页面; // go() 里面的参数为0,表示刷新页面

    16.5 Window Navigator

    window.navigator 对象包含有关访问者浏览器的信息。

    16.6 JavaScript 弹窗

    JavaScript 中三种消息框:警告框、确认框、提示框。

    16.6.1 警告框

    window.alert("sometext"); alert("sometext");

    16.6.2 确认框

    // window.confirm("sometext"); // confirm("sometext"); var r=confirm("按下按钮"); if (r==true) { x="你按下了\"确定\"按钮!"; } else { x="你按下了\"取消\"按钮!"; }

    16.6.3 提示框

    提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

    var person=prompt("请输入你的名字","Harry Potter"); if (person!=null && person!="") { x="你好 " + person + "! 今天感觉如何?"; document.getElementById("demo").innerHTML=x; }

    16.7 JavaScript计时事件

    通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

    在 JavaScritp 中使用计时事件是很容易的,两个关键方法是:

    setInterval() - 间隔指定的毫秒数不停地执行指定的代码。setTimeout() - 在指定的毫秒数后执行指定代码。

    注意: setInterval() 和 setTimeout() 是 HTML DOM Window对象的两个方法。

    16.7.1 setInterval()

    显示当前时间 :

    var myVar=setInterval(function(){myTimer()},1000); function myTimer() { var d=new Date(); var t=d.toLocaleTimeString(); document.getElementById("demo").innerHTML=t; }

    clearInterval(方法名) 方法用于停止 setInterval() 方法执行的函数代码。(计时方法时你必须使用全局变量)

    16.7.2 setTimeout()

    等待3秒,然后弹出 “Hello”:

    setTimeout(function(){alert("Hello")},3000);

    y Potter"); if (person!=null && person!="") { x="你好 " + person + “! 今天感觉如何?”; document.getElementById(“demo”).innerHTML=x; }

    ### 16.7 JavaScript计时事件 通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。 在 JavaScritp 中使用计时事件是很容易的,两个关键方法是: - setInterval() - 间隔指定的毫秒数不停地执行指定的代码。 - setTimeout() - 在指定的毫秒数后执行指定代码。 **注意:** setInterval() 和 setTimeout() 是 HTML DOM Window对象的两个方法。 #### 16.7.1 setInterval() 显示当前时间 : ```javascript var myVar=setInterval(function(){myTimer()},1000); function myTimer() { var d=new Date(); var t=d.toLocaleTimeString(); document.getElementById("demo").innerHTML=t; }

    clearInterval(方法名) 方法用于停止 setInterval() 方法执行的函数代码。(计时方法时你必须使用全局变量)

    16.7.2 setTimeout()

    等待3秒,然后弹出 “Hello”:

    setTimeout(function(){alert("Hello")},3000);

    clearTimeout() 方法用于停止执行setTimeout()方法的函数代码。(计时方法时你必须使用全局变量)

    Processed: 0.011, SQL: 9