js总结小点

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
     var x = 5;           // 现在 x 为数字
     var x = "John";      // 现在 x 为字符串

18 var cars=new Array();

19 对象属性有两种寻址方式:

      name=person.lastname;
      name=person["lastname"];

20 Undefined 这个值表示变量不含有值。可以通过将变量的值设置为 null 来清空变量。

21 创建对象方法:

    methodName : function() { // 代码 }
22 访问对象方法时若不添加 (), 它会返回函数的定义

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
    typeof null                  // object
    null === undefined           // false
    null == undefined            // true

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] }
     (3.14).constructor                 // 返回函数 Number()  { [native code] }
     false.constructor                  // 返回函数 Boolean() { [native code] }
     [1,2,3,4].constructor              // 返回函数 Array()   { [native code] }
     {name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }
     new Date().constructor             // 返回函数 Date()    { [native code] }
     function () {}.constructor         // 返回函数 Function(){ [native code] }

37 在 Number 方法 章节中,你可以找到更多数字转换为字符串的方法:

方法描述
toExponential()把对象的值转换为指数计数法。
toFixed()把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision()把数字格式化为指定的长度。

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
     "5" + null  // 返回"5null"   null 转换为 "null"
      "5" + 1     // 返回 "51"      1 转换为 "1" 
     "5" - 1     // 返回 4         "5" 转换为 5

42 search 方法可使用字符串作为参数。字符串参数会转换为正则表达式

43 正则表达式修饰符 

i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。

44 正则表达式模式

[abc]查找方括号之间的任何字符。
[0-9]查找任何从 0 至 9 的数字。
(x|y)查找任何以 | 分隔的选项。

元字符是拥有特殊含义的字符:

\d查找数字。
\s查找空白字符。
\b匹配单词边界。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

量词:

量词描述
n+匹配任何包含至少一个 n 的字符串。
n*匹配任何包含零个或多个 n 的字符串。
n?匹配任何包含零个或一个 n 的字符串。

45  RegExp 对象是一个预定义了属性和方法的正则表达式对象。

46  test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返  回 false。/e/.test("The best things in life are free!") = true

47  exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

               var patt1=new RegExp("e");
              document.write(patt1.exec("The best things in life are free"));输出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++) {
    // some code
}
return 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);

JSON.parse()用于将一个 JSON 字符串转换为 JavaScript 对象。
JSON.stringify()用于将 JavaScript 值转换为 JSON 字符串。

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 () {
    var x = "Hello!!";      // 我将调用自己
})();

78 arguments.length 属性返回函数调用过程接收到的参数个数:

function myFunction(a, b) {
    return arguments.length;//2
}

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>
document.getElementById("myBtn").οnclick=function(){displayDate()};
</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").

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

注意:不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

105 向原元素添加事件句柄 element.addEventListener("click", function(){ alert("Hello World!"); });

    你可以使用函数名,来引用外部函数:

element.addEventListener("click", myFunction);
function myFunction() {
    alert ("Hello World!");
}

106 addEventListener() 方法允许向同一个元素添加多个事件,且不会覆盖已存在的事件:

      你可以向同个元素添加不同类型的事件:

107 事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(eventfunctionuseCapture);

默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

108 removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction);

109 跨浏览器解决方法:

var x = document.getElementById("myBtn");
if (x.addEventListener) {                    // 所有主流浏览器,除了 IE 8 及更早版本
    x.addEventListener("click", myFunction);
} else if (x.attachEvent) {                  // IE 8 及更早版本
    x.attachEvent("onclick", myFunction);
}

110 创建新的 HTML 元素 (节点) - appendChild(),要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。

var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
var element = document.getElementById("div1");
element.appendChild(para);

111 我们使用了 appendChild() 方法,它用于添加新元素到尾部。如果我们需要将新元素添加到开始位置,可以使用 insertBefore() 方法:

var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
var child = document.getElementById("p1");
element.insertBefore(para, child);

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) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eye;
}

Person.prototype.nationality = "English";

var myFather = new Person("John", "Doe", 50, "blue");
document.getElementById("demo").innerHTML =
"我父亲的国籍是 " + myFather.nationality; 

当然我们也可以使用 prototype 属性就可以给对象的构造函数添加新的方法:

Person.prototype.name = function() {
  return this.firstName + " " + this.lastName
};

var myFather = new Person("John", "Doe", 50, "blue");
document.getElementById("demo").innerHTML =
"我的父亲是 " + myFather.name(); 

127 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数。

128 你可以使用 toString() 方法 输出16进制、8进制、2进制

var myNumber=128;
myNumber.toString(16);   // 返回 80
myNumber.toString(8);    // 返回 200
myNumber.toString(2);    // 返回 10000000

129 无穷大(Infinity)当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,在JavaScript中以-Infinity表示。无穷大值的行为特性和我们所期望的是一致的:基于它们的加、减、乘和除运算结果还是无穷大(当然还保留它们的正负号)。

130 var x = 123;
var y = new Number(123);
typeof(x) // 返回 Number
typeof(y) // 返回 Object

131字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置

var str="Hello world, welcome to the universe.";
var n=str.indexOf("welcome");

lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置

132 match()函数用来查找字符串中特定的字符,并且如果找到的话,则返回这个字符

133 replace() 方法在字符串中用某些字符替换另一些字符。

134 字符串大小写转换使用函数 toUpperCase() / toLowerCase():

135 字符串使用split()函数转为数组:

txt="a,b,c,d,e"   // String
txt.split(",");   // 使用逗号分隔

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);
或更简单的方法
var patt=/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
      || document.documentElement.clientWidth
      || document.body.clientWidth;
var h=window.innerHeight
      || document.documentElement.clientHeight
      || document.body.clientHeight;

该例显示浏览器窗口的高度和宽度。

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>";
txt+= "<p>浏览器名称: " + navigator.appName + "</p>";
txt+= "<p>浏览器版本: " + navigator.appVersion + "</p>";
txt+= "<p>启用Cookies: " + navigator.cookieEnabled + "</p>";
txt+= "<p>硬件平台: " + navigator.platform + "</p>";
txt+= "<p>用户代理: " + navigator.userAgent + "</p>";
txt+= "<p>用户代理语言: " + navigator.language + "</p>";
document.getElementById("example").innerHTML=txt;

147 可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

警告框window.alert("sometext");

确认框window.confirm("sometext");

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

提示框window.prompt("sometext","defaultvalue");

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

148 弹窗使用 反斜杠 + "n"(\n) 来设置换行。alert("Hello\nHow are you?");

149 JavaScript 计时事件:

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

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

150 以下实例将显示当前时间。 setInterval() 方法设置每秒钟执行一次代码,就是手表一样。

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

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){
    var d = new Date();
    d.setTime(d.getTime()+(exdays*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}
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 "";
}
function checkCookie(){
    var user=getCookie("username");
    if (user!=""){
        alert("欢迎 " + user + " 再次访问");
    }
    else {
        user = prompt("请输入你的名字:","");
          if (user!="" && user!=null){
            setCookie("username",user,30);
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yg94web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值