1 您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档。‘ 2 引入<script src="myScript.js"></script> 3 fn+f12打开chrome控制面板 4 显示数据的4种方法window.alert() 弹出警告框。 使用 document.write() 方法将内容写到 HTML 文档中。 使用 innerHTML 写入到 HTML 元素。 使用 console.log() 写入到浏览器的控制台。 5 js单行注释// 多行注释/**/ 6 16+"1" = 161 7 JavaScript 对大小写是敏感的。 8 JavaScript 使用 Unicode 字符集。 9 JavaScript 会忽略多余的空格 10 您可以在文本字符串中使用反斜杠\对代码行进行换行 11变量必须以字母开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做) 变量名称对大小写敏感(y 和 Y 是不同的变量) 12 一条语句中声明的多个变量不可以同时赋同一个值: var x,y,z=1; x,y 为 undefined, z 为 1。 13 未使用值来声明的变量,其值实际上是 undefined。 14 如果重新声明 JavaScript 变量,该变量的值不会丢失: 15 (值类型)基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。 16 引用数据类型:对象(Object)、数组(Array)、函数(Function)。 17 JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型: var x; // x 为 undefined 18 var cars=new Array(); 19 对象属性有两种寻址方式: name=person.lastname; 20 Undefined 这个值表示变量不含有值。可以通过将变量的值设置为 null 来清空变量。 21 创建对象方法: methodName : function() { // 代码 } 23 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。 24 如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。 25 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。 26 你的全局变量或者函数会覆盖windows对象的的变量或者函数 27 如果把数字与字符串相加,结果将成为字符串! 28 for/in 语句循环遍历对象的属性for (x in person) { txt=txt + person[x]; } 29 break 语句用于跳出循环。continue 用于跳过循环中的一个迭代。continue 语句(带有或不带标签引用)只能用在循环中。break 语句(不带标签引用),只能用在循环或 switch 中。 30 在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。 31 在 JavaScript 中 null 表示 "什么都没有"。null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是object。 32 null 和 undefined 的值相等,但类型不等: typeof undefined // undefined 33 在 JavaScript 中有 6 种不同的数据类型:string number boolean object function symbol 3 种对象类型:Object Date Array 2 个不包含任何值的数据类型:null undefined 34 NaN 的数据类型是 number 35 如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 object。可以使用 constructor 属性来查看对象是否为数组 (包含字符串 "Array"): 36 constructor 属性返回所有 JavaScript 变量的构造函数 "John".constructor // 返回函数 String() { [native code] } 37 在 Number 方法 章节中,你可以找到更多数字转换为字符串的方法:
38 全局方法 Number() 可以将字符串转换为数字。空字符串转换为 0。其他的字符串会转换为 NaN (不是个数字)。 39 + 可用于将变量转换为数字:var y = "5"; // y 是一个字符串 var x = + y; // x 是一个数字,如果变量不能转换,它仍然会是一个数字,但值为 NaN (不是一个数字): 40 Number(false) // 返回 0 Number(true) // 返回 1 41 当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型。 5 + null // 返回 5 null 转换为 0 42 search 方法可使用字符串作为参数。字符串参数会转换为正则表达式 43 正则表达式修饰符
44 正则表达式模式
元字符是拥有特殊含义的字符:
量词:
45 RegExp 对象是一个预定义了属性和方法的正则表达式对象。 46 test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返 回 false。/e/.test("The best things in life are free!") = true 47 exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 var patt1=new RegExp("e"); 48 JavaScript 声明提升,JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。JavaScript 只有声明的变量会提升,初始化的不会。 49 JavaScript 严格模式(strict mode)不允许使用未声明的变量。严格模式通过在脚本或函数的头部添加"use strict"; 表达式来声明。"use strict" 指令只允许出现在脚本或函数的开头。 50 严格模式的限制:不允许使用未声明的变量;不允许删除变量或对象。不允许删除函数。不允许变量重名:不允许使用转义字符:变量名不能使用 "eval" 字符串:变量名不能使用 "arguments" 字符串:禁止this关键字指向全局对象。 51 var x = 10;var y = "10";if (x == y) //true var x = 10;var y = "10";if (x === y)//false 52 switch 语句会使用恒等计算符(===)进行比较 53 JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定: 54 在 JavaScript 中, 对象 使用 名字作为索引。如果你使用名字作为索引,当访问数组时,JavaScript 会把数组重新定义为标准对象。执行这样操作后,数组的方法及属性将不能再使用,否则会产生错误: 55 定义数组元素,最后不能添加逗号 56 Undefined 不是 Null,在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。对象只有被定义才有可能为 null,否则为 undefined。 57 在每个代码块中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。 以下代码的的变量 i 返回 10,而不是 undefined: for (var i = 0; i < 10; i++) { 58 Const 是 JavaScript 的扩展。JavaScript 引擎支持它用在 Firefox 和 Chrome 中。但是它并不是 JavaScript 标准 ES3 或 ES5 的组成部分。建议:不要使用它。 59 在方法中,this 表示该方法所属的对象。 如果单独使用,this 表示全局对象。它指向全局(Global)对象。在浏览器中,window . 在函数中,this 表示全局对象。 在函数中,在严格模式下,this 是未定义的(undefined)。如果单独使用,this 也是指向全局(Global)对象。 在事件中,this 表示接收事件的元素。 类似 call() 和 apply() 方法可以将 this 引用到任何对象。 60 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。 var person1 = { fullName: function() { return this.firstName + " " + this.lastName; } } var person2 = { firstName:"John", lastName: "Doe", } person1.fullName.call(person2); // 返回 "John Doe" 61 let 声明的变量只在 let 命令所在的代码块内有效。 const 声明一个只读的常量,一旦声明,常量的值就不能改变。 62 函数内使用 var 声明的变量只能在函数内容访问,如果不使用 var 则是全局变量。使用 var 关键字声明的 变量不具备块级作用域的特性,它在 {} 外依然能被访问到。 { var x = 2; } // 这里可以使用 x 变量 { let x = 2; } // 这里不能使用 x 变量 在函数体内使用 var 和 let 关键字声明的变量有点类似。 它们的作用域都是 局部的: 63 使用 var 关键字声明的全局作用域变量属于 window 对象:使用 let 关键字声明的全局作用域变量不属于 window 对象: 64 JavaScript 中,var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明(JavaScript 变量提升)let 关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。 65 const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改,const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。 66 使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象:var obj = JSON.parse(text);
67 href="#"与href="javascript:void(0)"的区别:# 包含了一个位置信息,默认的锚是#top 也就是网页的上端。 而javascript:void(0), 仅仅表示一个死链接。 68 回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。 69 Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。构造 Promise 现在我们新建一个 Promise 对象: new Promise(function (resolve, reject) { // 要做的事情... }); 71 Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。 .then() 传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列: 72 resolve() 中可以放置一个参数用于向下一个 then 传递一个值,then 中的函数也可以返回一个值传递给 then。但是,如果 then 中返回的是一个 Promise 对象,那么下一个 then 将相当于对这个返回的 Promise 进行操作,resolve 和 reject 的作用域只有起始函数,不包括 then 以及其他序列;resolve 和 reject 并不能够使起始函数停止运行,别忘了 return。 73 回答常见的问题(FAQ)Q: then、catch 和 finally 序列能否顺序颠倒? A: 可以,效果完全一样。但不建议这样做,最好按 then-catch-finally 的顺序编写程序。 Q: 除了 then 块以外,其它两种块能否多次使用? A: 可以,finally 与 then 一样会按顺序执行,但是 catch 块只会执行第一个,除非 catch 块里有异常。所以最好只安排一个 catch 和 finally 块。 Q: then 块如何中断? A: then 块默认会向下顺序执行,return 是不能中断的,可以通过 throw 来跳转至 catch 实现中断。 Q: 什么时候适合用 Promise 而不是传统回调函数? A: 当需要多次顺序执行异步操作的时候,例如,如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise。 Q: Promise 是一种将异步转换为同步的方法吗? A: 完全不是。Promise 只不过是一种更良好的编程风格。 Q: 什么时候我们需要再写一个 then 而不是在当前的 then 接着编程? A: 当你又需要调用一个异步任务的时候。 74 异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行 75 变量名推荐使用驼峰法来命名(camelCase): 76 通常运算符 ( = + - * / ) 前后需要添加空格: 77 函数表达式可以 "自调用"。自调用表达式会自动调用。如果表达式后面紧跟 () ,则会自动调用。 (function () { 78 arguments.length 属性返回函数调用过程接收到的参数个数: function myFunction(a, b) { 79 ES6 新增了箭头函数。 箭头函数表达式的语法比普通函数表达式更简洁。 (参数1, 参数2, …, 参数N) => { 函数声明 } (参数1, 参数2, …, 参数N) => 表达式(单一) // 相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; } 当只有一个参数时,圆括号是可选的: (单一参数) => {函数声明} 单一参数 => {函数声明} 没有参数的函数应该写成一对圆括号: () => {函数声明} 80 有的箭头函数都没有自己的 this。 不适合定义一个 对象的方法。 当我们使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的。 箭头函数是不能提升的,所以需要在使用之前定义。 使用 const 比使用 var 更安全,因为函数表达式始终是一个常量。 如果函数部分只是一个语句,则可以省略 return 关键字和大括号 {},这样做是一个比较好的习惯 const x = (x, y) => { return x * y }; 81 ES6 支持函数带有默认参数,就判断 undefined 和 || 的操作 function myFunction(x, y = 10) { // y is 10 if not passed or undefined return x + y; } 82 JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了函数调用的参数数组。 83 构造函数中 this 关键字没有任何的值。this 的值在函数调用实例化对象(new object)时创建。 84 在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。 function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 返回 20 function myFunction(a, b) { return a * b; } myArray = [10, 2]; myObject = myFunction.apply(myObject, myArray); // 返回 20 两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。 在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。 在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代 85 通过 call() 或 apply() 方法你可以设置 this 的值, 且作为已存在对象的新方法调用。 86 全局和局部变量即便名称相同,它们也是两个不同的变量。修改其中一个,不会影响另一个的值 87 变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义 88 实际上,在 JavaScript 中,所有函数都能访问它们上一层的作用域。JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。该实例中,内嵌函数 plus() 可以访问父函数的 counter 变量: function add() { var counter = 0; function plus() {counter += 1;} plus(); return counter; } 如果我们能在外部访问 plus() 函数,这样就能解决计数器的困境。我们同样需要确保 counter = 0 只执行一次。 89 var add = (function () { var counter = 0; return function () { return counter += 1; } })(); add(); add(); add(); // 计数器为 3 变量 add 指定了函数自我调用的返回字值。 自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。 add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。 这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。 计数器受匿名函数的作用域保护,只能通过 add 方法修改。 90 闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。 直观的说就是形成一个不销毁的栈环境。 91 我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。 每个类中包含了一个特殊的方法 constructor(),它是类的构造函数,这种方法用于创建和初始化一个由 class 创建的对象。 class Runoob { constructor(name, url) { this.name = name; this.url = url; } } 92 类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter 和 setter 都在严格模式下执行。如果你没有遵循严格模式,则会出现错误 date = new Date(); // 错误 let date = new Date(); // 正确 93 JavaScript 类继承使用 extends 关键字。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。super() 方法用于调用父类的构造函数。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类(父类),新建的类称为派生类(子类)。 class Site { constructor(name) { this.sitename = name; } present() { return '我喜欢' + this.sitename; } } class Runoob extends Site { constructor(name, age) { super(name); this.age = age; } show() { return this.present() + ', 它创建了 ' + this.age + ' 年。'; } } let noob = new Runoob("菜鸟教程", 5); document.getElementById("demo").innerHTML = noob.show(); 94 函数声明和类声明之间的一个重要区别在于, 函数声明会提升,类声明不会。 95 静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,但不属于对象,在实例化对象之前可以通过 类名.方法名 调用静态方法。静态方法不能在对象上调用,只能在类中调用。 class Runoob { constructor(name) { this.name = name; } static hello() { return "Hello!!"; } } let noob = new Runoob("菜鸟教程"); // 可以在类中调用 'hello()' 方法 document.getElementById("demo").innerHTML = Runoob.hello(); // 不能通过实例化后的对象调用静态方法 // document.getElementById("demo").innerHTML = noob.hello(); // 以上代码会报错 如果你想在对象 noob 中使用静态方法,可以作为一个参数传递给它: class Runoob { constructor(name) { this.name = name; } static hello(x) { return "Hello " + x.name; } } let noob = new Runoob("菜鸟教程"); document.getElementById("demo").innerHTML = Runoob.hello(noob); 96 如需改变 HTML 元素的属性,请使用这个语法:document.getElementById(id).attribute=新属性值 97 如需改变 HTML 元素的样式,请使用这个语法:document.getElementById(id).style.property=新样式 98 HTML DOM 允许您使用 JavaScript 来向 HTML 元素分配事件: <script> 99 onload 和 onunload 事件会在用户进入或离开页面时被触发。 onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。 onload 和 onunload 事件可用于处理 cookie。 <body οnlοad="checkCookies()"> 100 如何使用 onchange 的例子。当用户改变输入字段的内容时,会调用 upperCase() 函数。 <input type="text" id="fname" οnchange="upperCase()"> 101 onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数。 102 onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件,最后,当完成鼠标点击时,会触发 onclick 事件。 103 在用户点击按钮时触发监听事件: document.getElementById("myBtn").addEventListener("click", displayDate); addEventListener() 方法用于向指定元素添加事件句柄。 addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 你可以向一个元素添加多个事件句柄。 你可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。 你可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。 addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。 当你使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。 你可以使用 removeEventListener() 方法来移除事件的监听。 104 element.addEventListener(event, function, useCapture); 第一个参数是事件的类型 (如 "click" 或 "mousedown"). 第二个参数是事件触发后调用的函数。 第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。
105 向原元素添加事件句柄 element.addEventListener("click", function(){ alert("Hello World!"); }); 你可以使用函数名,来引用外部函数: element.addEventListener("click", myFunction); 106 addEventListener() 方法允许向同一个元素添加多个事件,且不会覆盖已存在的事件: 你可以向同个元素添加不同类型的事件: 107 事件传递有两种方式:冒泡与捕获。 事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢? 在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。 在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。 addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型: addEventListener(event, function, useCapture); 默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。 108 removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄: element.removeEventListener("mousemove", myFunction); 109 跨浏览器解决方法: var x = document.getElementById("myBtn"); 110 创建新的 HTML 元素 (节点) - appendChild(),要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。 var para = document.createElement("p"); 111 我们使用了 appendChild() 方法,它用于添加新元素到尾部。如果我们需要将新元素添加到开始位置,可以使用 insertBefore() 方法: var para = document.createElement("p"); 112 要移除一个元素,你需要知道该元素的父元素。 var parent = document.getElementById("div1"); var child = document.getElementById("p1"); parent.removeChild(child); 113 如果能够在不引用父元素的情况下删除某个元素,就太好了。不过很遗憾。DOM 需要清楚您需要删除的元素,以及它的父元素,以下代码是已知要查找的子元素,然后查找其父元素,再删除这个子元素(删除节点必须知道父节点): var child = document.getElementById("p1"); child.parentNode.removeChild(child); 114 替换 HTML 元素 - replaceChild(),我们可以使用 replaceChild() 方法来替换 HTML DOM 中的元素。 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); 115 getElementsByTagName() 方法返回 HTMLCollection 对象。HTMLCollection 对象类似包含 HTML 元素的一个数组。以下代码获取文档所有的 <p> 元素:var x = document.getElementsByTagName("p"); HTMLCollection 对象的 length 属性定义了集合中元素的数量。 116 修改所有 <p> 元素的背景颜色: var myCollection = document.getElementsByTagName("p"); var i; for (i = 0; i < myCollection.length; i++) { myCollection[i].style.backgroundColor = "red"; } 117 HTMLCollection 不是一个数组!HTMLCollection 看起来可能是一个数组,但其实不是。 你可以像数组一样,使用索引来获取元素。HTMLCollection 无法使用数组的方法: valueOf(), pop(), push(), 或 join() 。 118 大部分浏览器的 querySelectorAll() 返回 NodeList 对象。以下代码选取了文档中所有的 <p> 节点: var myNodeList = document.querySelectorAll("p"); 119 NodeList 对象是一个从文档中获取的节点列表 (集合) 。NodeList 对象类似 HTMLCollection 对象。 NodeList 中的元素可以通过索引(以 0 为起始位置)来访问。访问第二个 <p> 元素可以是以下代码: y = myNodeList[1]; 120 NodeList 对象 length 属性,NodeList 对象 length 属性定义了节点列表中元素的数量。 121 HTMLCollection 与 NodeList 的区别: HTMLCollection 是 HTML 元素的集合。 NodeList 是一个文档节点的集合。 NodeList 与 HTMLCollection 有很多类似的地方。 NodeList 与 HTMLCollection 都与数组对象有点类似,可以使用索引 (0, 1, 2, 3, 4, ...) 来获取元素。 NodeList 与 HTMLCollection 都有 length 属性。 HTMLCollection 元素可以通过 name,id 或索引来获取。 NodeList 只能通过索引来获取。 只有 NodeList 对象有包含属性节点和文本节点。 122 创建 JavaScript 对象, 使用 Object 这个例子创建了对象的一个新实例,并向其添加了四个属性: person=new Object(); person.firstname="John"; person.lastname="Doe"; person.age=50; person.eyecolor="blue"; 使用对象构造器 本例使用函数来构造对象: function person(firstname,lastname,age,eyecolor) { this.firstname=firstname; this.lastname=lastname; this.age=age; this.eyecolor=eyecolor; } 123 创建 JavaScript 对象实例,一旦您有了对象构造器,就可以创建新的对象实例,就像这样: var myFather=new person("John","Doe",50,"blue"); var myMother=new person("Sally","Rally",48,"green"); 124 JavaScript for...in 语句循环遍历对象的属性。 var person={ fname:"John", lname:"Doe", age:25 }; for (x in person) { txt=txt + person[x]; } 125 在一个已存在构造器的对象中是不能添加新的属性:要添加一个新的属性需要在在构造器函数中添加: 126 所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法,有的时候我们想要在所有已经存在的对象添加新的属性或方法。另外,有时候我们想要在对象的构造函数中添加属性或方法。 使用 prototype 属性就可以给对象的构造函数添加新的属性: function Person(first, last, age, eye) { Person.prototype.nationality = "English"; var myFather = new Person("John", "Doe", 50, "blue"); 当然我们也可以使用 prototype 属性就可以给对象的构造函数添加新的方法: Person.prototype.name = function() { var myFather = new Person("John", "Doe", 50, "blue"); 127 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数。 128 你可以使用 toString() 方法 输出16进制、8进制、2进制 var myNumber=128; 129 无穷大(Infinity)当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,在JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大(当然还保留它们的正负号)。 130 var x = 123; 131字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置 var str="Hello world, welcome to the universe."; lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置 132 match()函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符 133 replace() 方法在字符串中用某些字符替换另一些字符。 134 字符串大小写转换使用函数 toUpperCase() / toLowerCase(): 135 字符串使用split()函数转为数组: txt="a,b,c,d,e" // String 136 所有的JavaScript变量都是对象。数组元素是对象。函数是对象。因此,你可以在数组中有不同的变量类型。你可以在一个数组中包含对象元素、函数、数组 137 下面的例子使用了 Math 对象的 floor() 方法和 random() 来返回一个介于 0 和 11 之间的随机数 document.write(Math.floor(Math.random()*11)); 138 JavaScript RegExp 对象,RegExp:是正则表达式(regular expression)的简写。 语法 var patt=new RegExp(pattern,modifiers); 139 i - 修饰符是用来执行不区分大小写的匹配。g - 修饰符是用于执行全文的搜索 140 test()方法搜索字符串指定的值,根据结果并返回真或假。下面的示例是从字符串中搜索字符 "e" var patt1=new RegExp("e"); document.write(patt1.test("The best things in life are free")); 由于该字符串中存在字母 "e",以上代码的输出将是:true 141 exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null 142 Window 尺寸 有三种方法能够确定浏览器窗口的尺寸。 var w=window.innerWidth 该例显示浏览器窗口的高度和宽度。 143 window.screen对象在编写时可以不使用 window 这个前缀。 一些属性: screen.availWidth - 可用的屏幕宽度 screen.availHeight - 可用的屏幕高度 144 window.location 对象在编写时可不使用 window 这个前缀。 一些例子: location.hostname 返回 web 主机的域名 location.pathname 返回当前页面的路径和文件名 location.port 返回 web 主机的端口 (80 或 443) location.protocol 返回所使用的 web 协议(http: 或 https:) location.href 属性返回当前页面的 URL。 location.assign() 方法加载新的文档。 145window.history对象在编写时可不使用 window 这个前缀。为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。 一些方法: history.back() - 与在浏览器点击后退按钮相同 history.forward() - 与在浏览器中点击向前按钮相同 146 window.navigator 对象在编写时可不使用 window 这个前缀 txt = "<p>浏览器代号: " + navigator.appCodeName + "</p>"; 147 可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。 警告框window.alert("sometext"); 确认框window.confirm("sometext"); var r=confirm("按下按钮"); 提示框window.prompt("sometext","defaultvalue"); var person=prompt("请输入你的名字","Harry Potter"); 148 弹窗使用 反斜杠 + "n"(\n) 来设置换行。alert("Hello\nHow are you?"); 149 JavaScript 计时事件:
注意: setInterval() 和 setTimeout() 是 HTML DOM Window对象的两个方法。 150 以下实例将显示当前时间。 setInterval() 方法设置每秒钟执行一次代码,就是手表一样。 var myVar=setInterval(function(){myTimer()},1000); 151 clearInterval() 方法用于停止 setInterval() 方法执行的函数代码 152 clearTimeout() 方法用于停止执行setTimeout()方法的函数代码。 153 Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。Cookie 的作用就是用于解决 "如何记录客户端的用户信息",当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服务端通过这种方式来获取用户的信息。 154 使用 JavaScript 创建Cookie: JavaScript 中,创建 cookie 如下所示, document.cookie="username=John Doe"; 您还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。默认情况下,cookie 在浏览器关闭时删除: document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT"; 您可以使用 path 参数告诉浏览器 cookie 的路径。默认情况下,cookie 属于当前页面。 document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/"; 155 使用 JavaScript 读取 Cookie 在 JavaScript 中, 可以使用以下代码来读取 cookie: var x = document.cookie; document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value; 156 使用 JavaScript 修改 Cookie 在 JavaScript 中,修改 cookie 类似于创建 cookie,如下所示: document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/"; 旧的 cookie 将被覆盖。 157 使用 JavaScript 删除 Cookie 删除 cookie 非常简单。您只需要设置 expires 参数为以前的时间即可,如下所示,设置为 Thu, 01 Jan 1970 00:00:00 GMT: document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT"; 注意,当您删除时不必指定 cookie 的值。 158 设置 cookie 值的函数 首先,我们创建一个函数用于存储访问者的名字: function setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname + "=" + cvalue + "; " + expires; } 159 获取 cookie 值的函数 然后,我们创建一个函数用于返回指定 cookie 的值: function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) return c.substring(name.length,c.length); } return ""; } 160 检测 cookie 值的函数 function checkCookie() { var username=getCookie("username"); if (username!="") { alert("Welcome again " + username); } else { username = prompt("Please enter your name:",""); if (username!="" && username!=null) { setCookie("username",username,365); } } } 161 完整cookie示例,以下实例在页面载入时执行 checkCookie() 函数。 function setCookie(cname,cvalue,exdays){ |
js总结小点
最新推荐文章于 2024-07-20 10:36:53 发布