性能优化
作为最佳实践,我们会关闭body标签前引入JavaScript代码.这样浏览器就会在加载脚本之前解析和显示HTML,有利于提升页面的性能
打印的技巧
let obj = { a: 1, b: 2 };
alert("我是一个弹窗"); // 0
console.log(obj); // 1
console.log("obj: " + obj); // 2
console.log("obj: ", obj); // 3
console.dir(obj); // 4
console.error("我是一个错误信息");// 5
console.assert(false); // 6
注意:
0: 弹窗展示内容
1: 这里打印是正常的,对象也可以展开
2: 无法以可视化的形式输出,因为这样打印,对象当做字符串"[object object]"展示,这个和alert是一样的
3: 注意,这里用的是\',\',对象以可视化的形式输出,这种效果是比较好的一种
4: 这个是专门打印对象的一种方式,比如说dom元素,log打印可能是标签,并没有其他属性,但是这个能打印出对象,并可以展开查看属性情况
5: 这个打印出来的就是一个错误语句
6: 断言打印,当打印内容为true的时候就不会打印,如果为false,就会报错,但是不能终止程序运行
JavaScript的数据类型 (P11)
原始类型:null , undefined , 字符串 , 数 , 布尔值 , Symbol
Symbol是ES6中引入的数据类型,代表着独一无二的值
派生数据类型/对象: JavaScript对象(函数, 数组, 正则表达式)
delete:对象属性的删除操作 (P11)
var myObj = {
a: 1,
b: 2
}
console.log(myObj);
delete myObj.a;
console.log(myObj)
相等运算符(== 和 ===)
使用==的时候,不同类型的值也可以被看作相等
(1).具体情况表
| 类型(x) | 类型(y) | 结果 | 说明 |
|---|---|---|---|
| null | undefined | true | 无 |
| undefined | null | true | 无 |
| 数 | 字符串 | x == toNumber(y) | 将字符串转数再比较 |
| 字符串 | 数 | toNumber(x) == y | 将字符串转数再比较 |
| 布尔值 | 任意类型 | toNumber(x) == y | 将布尔值转数再比较 |
| 任意类型 | 布尔值 | x == toNumber(y) | 将布尔值转数再比较 |
| 字符串或数 | 对象 | x == toPrimitive(y) | 将对象转原始值再比较 |
| 对象 | 字符串或数 | toPrimitive(x) == y | 将对象转原始值再比较 |
如果
x和y的类型相同,JavaScript会用equals方法比较这两个值或对象
toNumber 和 toPrimitive方法是内部的
(2)toNumber对不同类型的返回值结果
| 类型 | 结果 |
|---|---|
| undefined | NaN |
| null | null |
| 数 | 对应的数值 |
| 布尔值 | true: 1,false: 0 |
(3)toPrimitive 对不同类型的返回值结果
| 类型 | 结果 |
|---|---|
| 对象 | 如果对象的valueOf方法的结果是原始值,返回原始值,如果对象的toString方法返回的是原始值,就反悔这个值.其他的情况返回同一个错误 |
(4)思考:为什么if("a")是true,但是if("a" == true)却是false
解: 这里
if("a"),字符串"a"被隐式转化为了Boolean值(Blooean("a")),但是在与true比较时候,"a"被转为了数字(NaN),而true这个布尔值,转为了1,所以最后比较结果为"NaN == 1",所以为false
使用===的时候,同类型的并且值想等才能相等
这个比较一般都没有什么问题,但是还是有部分注意下
- NaN === NaN => false
- {a: 0, b:1} === {a: 0, b: 1} => false