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