一、确定变量类型
- 原始类型变量确定类型使用typeof,例如:
console.log(typeof 22);//number
console.log(typeof "mike");//string
console.log(typeof true);//boolean
console.log(typeof null);//object
console.log(typeof new Object());//object
console.log(typeof function(){});//function
- 引用类型变量的类型、原始类型的包装类型变量类型的确定使用instanceof,例如:
console.log(person instanceof Object);//变量person是否为Object?
console.log(colors instanceof Array);//变量colors是否为Array?
console.log(pattern instanceof RegExp);//变量pattern是否为RegExp?
console.log(new String() instanceof String);//true
console.log(new Number() instanceof Number);//true
console.log(new Boolean() instanceof Boolean);//true
二、作用域
- 执行上下文作用域
在浏览器中,window对象即为全局上下文,在应用退出前(关闭网页或退出浏览器)时才会被销毁。内部上下文可以通过作用域链访问外部上下文中的一切,但外部上下文无法访问内部上下文中的任何东西。
- 作用域链增强
(1)eval()调用
(2)try/catch语句的catch块
(3)with语句
三、垃圾回收
- 离开作用域的值会被自动标记为可回收,然后再垃圾回收期间被删除
- 主流的垃圾回收算法是标记清理,即先给当前不使用的值加上标记,再回来回收它们的内存
- 引用计数是另一种垃圾回收策略,需要记录值被引用了多少次,js引擎不在使用这种算法,但某些旧版本的IE仍然会受这种算法的影响,原因是js会访问原生js对象(如DOM对象)
- 引用计数再代码中存在循环引用时会出现问题
- 解除变量的引用不仅可以消除循环引用,而且对垃圾回收也有帮助。为促进内存回收,全局对象、全局对象的属性和循环引用都应该在不需要时接触引用
四、引用类型与原始值包装类型的主要区别
引用类型与原始值包装类型的主要区别在于对象的生命周期,在通过new实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象只存在于访问它的内行代码执行期间。
五、Number
Number是对应数值的引用类型。
- toFixed()方法:返回包含指定小数点位数的数值字符串,toFixed(0)对数值进行四舍五入取整
- toExponential ():返回以科学计数法表示的数值字符串
- toPrecision():根据情况返回最合理的输出结果(固定长度/科学计数)
- Number.isInteger():鉴别一个数值是否为整数
六、String
- indexOf()和LastIndexOf():查找指定字符串,返回位置,如果没找到返回-1,indexOf()从前往后查找,LastIndexOf()从后往前查找。
- trim():删除字符串前后的空格,返回字符串的副本。
七、单例内置对象
内置对象即任何由ECMAScript实现提供、与宿主环境无关,并在ECMAScript程序开始执行时就存在对象。
- Object
- Array
- String
- Global:浏览器将window对象实现为Global对象的代理
- Math