Appearance
类型与转换
来源:
js/基础/1基础.html,对 JS 类型系统、隐式转换、类型判断、this 绑定进行实例化验证。
一、基本类型与包装对象
基本类型在访问属性和方法时,JS 引擎会自动生成一个临时包装对象,调用结束后立即销毁。
js
注意:
- 数字直接量调用属性会被误判为小数点,如
123.toString()报错,需(123).toString() {} instanceof Object不允许,因为{}被识别为代码块
二、隐式转换
2.1 转 Boolean
if (any) {}本质上就是类型转 Boolean 的过程。引用类型全部为true。
js
2.2 转 String
大部分返回自己的字符串形态,Object 返回
[object Object]。
js
2.3 转 Number
引用类型转 Number 一般为
NaN,数组是例外。
js
WARNING
Symbol() 不能转 Number,会抛出 TypeError。
三、类型判断
原文件用 20+ 种类型的数组,分别用
typeof、constructor、instanceof、Object.prototype.toString遍历对比。
js
结论:
typeof:引用类型统一返回"object",null也被判为"object"constructor:重写prototype对象时会影响指向;null/undefined无 constructorinstanceof:跨 iframe 场景失效,pageB的数组到pageA后instanceof Array为falseObject.prototype.toString:最准确的类型判断方式,返回[object Xxx]格式
四、手写 call / apply / bind
4.1 手写 call
js
4.2 手写 apply
js
4.3 手写 bind
js
五、手写 new
js
两种实现方式的区别
obj.__proto__ = fn.prototype:直接赋值,原型链顶端为Object.prototypeObject.create(fn.prototype):创建干净的空对象,__proto__正确指向