【JS】Javascript高级程序设计第四章 读书笔记2
1.确定类型
一 、typeof 操作符最适合用来判断一个变量是否为原始类型,但是对null和Object的检测都会返回Object,但它对引用值的用处不大。
let s = "Nicholas";
let b = true;
let i = 22;
let u;
let n = null;
let o = new Object();
console.log(typeof s); // string
console.log(typeof i); // number
console.log(typeof b); // boolean
console.log(typeof u); // undefined
console.log(typeof n); // object
console.log(typeof o); // object
typeof 虽然对原始值很有用,但它对引用值的用处不大
二、instanceof 检测原始值,则始终会返回 false ,因为原始值不是对象。而如果我们想知道它是什么类型的对象。为了解决这个问题,ECMAScript 提供了 instanceof 操作符。
console.log(person instanceof Object); // 变量 person 是 Object 吗?
console.log(colors instanceof Array); // 变量 colors 是 Array 吗?
console.log(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
2.变量声明
暂时性死区
在let和const声明变量之前使用这个变量都会报错ReferenceError。之前是认为let和const不会变量提升,所以才会报错,其实是因为暂时性死区temporal dead zone的缘故,实际上不能在声明之前使用 let 变量。因此,从写 JavaScript 代码的角度说, let 的提升跟 var
是不一样的。
3. Object.freeze()
如果想让整个对象都不能修改,可以使用 Object.freeze() ,这样再给属性赋值时虽然不会报错,但会静默失败:
const o3 = Object.freeze({ });
o3.name = 'Jake';
console.log(o3.name); // undefined
4.关于变量定义的建议
开发实践表明,如果开发流程并不会因此而受很大影响,就应该尽可能地多使用const声明,除非确实需要一个将来会重新赋值的变量。这样可以从根本上保证提前发现重新赋值导致的 bug。
5.解除引用
如果数据不再必要,那么把它设置为 null ,从而释放其引用。这也可以叫作解除引用。
6.通过 const 和 let 声明提升性能
ES6 增加这两个关键字不仅有助于改善代码风格,而且同样有助于改进垃圾回收的过程。因为 const和 let 都以块(而非函数)为作用域,所以相比于使用 var ,使用这两个新关键字可能会更早地让垃圾回收程序介入,尽早回收应该回收的内存。在块作用域比函数作用域更早终止的情况下,这就有可能发生。
还没有评论,来说两句吧...