《JavaScript》高级程序设计---第3章

3.基本概念

  1. 松散类型:所谓松散类型就是可以用来保存任何类型的数据。
  2. 给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。
  3. Object本质上由一组无序的名值对组成。
  4. 未经初始化的默认值就会取得undefined值。
  5. True和False都不是Boolean值,只是标识符。
  6. 如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存,因为浮点数值需要的内存空间是保存整数值的两倍。
  7. NaN与任何值都不相等,包括NaN本身。
  8. 把非数值转化为数值的3个函数:Number()、paeseInt()和parseFloat()。
  9. ECMAScript中的对象其实就是一组数据和功能的集合。
  10. Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
  11. Object的每个实例都具有下列属性和方法:
constructor 保存着用于创建当前对象的函数。
hasOwnProperty 用于检查给定的属性在当前对象实例中是否存在
isPrototypeof(object) 用于检查传入的对象是否是当前对象的原型
propertyIsEnumerable(propertyName) 用于检查给定的属性是否能够使用for-in语句来枚举
toLocaleString() 返回对象的字符串表示,该字符串与执行环境的地区相对应
toString() 返回对象的字符串表示
valueOf() 返回对象的字符串、数值或布尔值表示
  1. 从技术角度讲,ECMA-262中对象的行为不一定适用于JavaScript中的其他对象。浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主的对象,因为它们是由宿主实现提供和定义的。ECMA-262不负责定义宿主对象,因此宿主对象可能会也可能不会继承object。
  2. 一元操作符:只能操作一个值的操作符叫一元操作符。
  3. 位操作符:位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript中的所有数值都以IEEE-765 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最好再将结果转换回64位。对于开发人员来说,由于64位存储格式是透明的,因此整个过程就像是只存在32位的整数一样。
  4. 求-18的二进制码的过程:
    (1)求18的二进制码即:
    0000 0000 0000 0000 0000 0000 0001 0010
    (2) 对该二进制码进行按位取反
    1111 1111 1111 1111 1111 1111 1110 1101
    (3)二进制反码加1
    1111 1111 1111 1111 1111 1111 1110 1110
  5. ECMAScript会尽力向我们隐藏所有的信息,即:在以二进制字符串形式输出一个负数时,我们看到的只是这个负数绝对值的二进制码前面加上了一个负号。
  6. 按位非(NOT):按位非操作符由一个波浪线(~)表示,执行按位非得结果就是返回数值得反码。按位非是ECMAScript操作符中少数几个与二进制计算有关得操作符之一。
  7. 按位与(&)只在两个数值的对应位都是1时才返回1,任何一位是0,结果都是0。
  8. 按位或(|)只有在两个数值的对应位都是0时才返回0,任何1位是1,结果都是1。
  9. 按位异或(^)只有在两个数值的对应位都不相同时才返回1,否则返回0。
  10. 左移(<<),这个操作符会将数值的所有位向左移动指定的位数。
  11. 有符号的右移(>>),这个操作符会将数值向右移动,但保留符号位。
  12. 无符号的右移(>>>),这个操作符会将数值的所有32位都向右移动。
  13. 不能在逻辑与操作中使用未定义的值。
  14. 我们可以利用逻辑或的这一行来避免位变量赋null或undefined值。
  15. 如果参与乘性计算的某个操作数不是数值,后台会先使用Number()转型函数将其转换为数值。也就是说,空字符串将被当作0,布尔值true将被当作1。
  16. var result2=5+“5” ; //“55”
  17. var result3=NaN-1; //NaN
  18. ECMAScript对象的属性都没有顺序。因此,通过for-in循环输出的属性名的顺序时不可测的。具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
  19. ECMAScript的switch语句中可使用任何数据类型,无论是字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至是表达式。
  20. ECMAScript中,switch语句在比较值时使用的时全等操作符,因此不会发生类型转换(例如,字符串"10"不等于数值10)。
  21. ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接受两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,原因是ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含哪些参数。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
  22. ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必需的。
  23. arguments的值永远与对应命名参数的值保持同步。例如:传进来的第二个参数num2=10,现在利用arguments[1]=9后,num2=9。不过,这并不是说读取这两个值会访问相同的内存空间,它们的内存空间是独立的,但它们的值会同步。
  24. 没有传递值得命名参数将自动被赋予undefined值,和定义了变量但没有初始化一样。
  25. ECMAScript函数不能像传统意义上那样实现重载。如果定义了两个名字相同得函数,则该名字只属于后定义得函数。
  26. JavaScript得核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的。ECMAScript中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。

猜你喜欢

转载自blog.csdn.net/piano9425/article/details/82890411