第二章 在HTML中使用JavaScript
疑问
XHTML与HTML的区别:链接
MIME的含义:链接
页面的load事件和DOMContentLoaded事件的区别:链接
如何禁用浏览器脚本:链接
Tips:
- 分号很重要,有提高性能的可能
-
第三章 基本概念
疑问
IEEE754格式:链接
Tips
没必要显示的将一个变量设置为undefined
- 对于一个将要保存对象而还没有保存的变量而言,初始值设置为null比较合适
- IEEE754格式
- 默认情况下,ECMAScript会把小数点后带有6个零以上的浮点数值转换为以e表示法表示的数值
- 永远不要测试某个特定的浮点数值
- 任何设计NaN的计算操作,都会返回NaN本身
function obj1() {
return {
valueOf: () => "1"
};
}
function obj2() {
return {
valueOf: () => "A"
};
}
const _obj1 = obj1();
const _obj2 = obj2();
console.log(isNaN(_obj1)); //=>false
console.log(isNaN(_obj2)); //=>true
上面代码是个很有意思的点;尽管有些不可思议,但是isNaN()确实也适用于对象,在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于返回的这个值再调用toString()方法,在测试返回值。这个过程也是ECMAScript中内置函数和操作符的一般执行流程。
- 一元加操作符和Number()函数等效
- 字符串不可变性,导致修改字符串操作的过程有两步,先销毁原来的,再重新赋值新的,开销大。
- 数值,布尔值,对象,字符串值都有toString()方法,但是null,undefined没有。
-
操作符
逻辑非 ! ;首先讲一个操作数转化为一个布尔值,再对其求反。 因此 双非 “!!”就可以用来对任意操作数转化布尔值了。
- 逻辑与 && ;(短路操作) 当两个操作数都为true的时候其结果才为true;当遇到操作数不是布尔值的时候,其计算过程也是先转化为布尔值,在计算。
- 逻辑或 || ;(短路操作)任意一个操作数的结果为true,其结果就为true;当遇到操作数不是布尔值的时候,其计算过程也是先转化为布尔值,在计算。
乘性操作符:
- 乘操作符 * ;
- 除法操作符/ ;
- 求模(求余数)% ;
加性操作符:
- 加操作符 +;
如果只有一个操作数是字符串,则将另外一个也转化为字符串,在进行拼接;如果只有一个操作数是对象,布尔值,数值,则调用他们的toString()函数,获得相应的字符串后,在进行拼接。 - 减操作符 -;
先对非数值的操作数进行Number()转化,之后再进行计算;如果是对象,则调用其valueOf()函数,在进行计算。如果没有valueOf()函数,则调用toString()函数,将得到的字符串转化数字后在计算。 - 关系操作符:>,<,>=,<=
如果一个操作数是对象,则调用对象的valueOf()函数,用得到的结果按照数字或者字符串的规则比较,没有valueOf()函数,调用toString()函数,并用得到的结果按照数字或者字符串的规则比较。 根据规则,任何数和NaN比较,结果都是false。 - 相等:==;不相等:!= ;二者都是先进行转换,在进行比较。
- 全等:===;不全等:!===;只比较,不转换。
tips:由于相等和不相等操作符存在类型转换问题,所以为了保持代码中的数据类型的完整性,推荐使用全等-不全等操作符作比较。