手记

javascript: 关于类型的相关问题

js是弱类型语言
弱类型:在定义数据的时候不需要对类型进行限制,允许不同类型的数据进行运算。缺点:代码的健壮性比较低,另外执行效率也比较低。优点:操作方便,动态语言
强类型:在定义数据的时候需要对类型进行限制,不允许不同类型数据间的运算。缺点:只能和兼容类型进行运算和操作。优点:执行效率高

JS中有哪些场景会出现隐式类型转换?
1.一元操作符
递增(++) 递减(--)操作符:在应用于字符串,布尔值,对象时会隐式的将其转换为数字值。
一元加(+) 一元减 (-)操作符:对非数值应用时,会调用Number()进行转换。
2.布尔操作符
逻辑非(!):隐式转换为布尔值再求反。
逻辑与(&&) 逻辑或(||):短路操作,当操作数不是布尔值时会进行隐式转换。
3.乘性操作符
乘法,除法,求模:对非数值应用时,会调用Number()进行转换。
4.加法减法操作符
加法:当有一个操作数是字符串,对另一个隐式转化为字符串后执行字符串拼接。
减法:对非数值应用时,会调用Number()进行转换。
5.关系操作符
小于(<) 大于(>) 小于等于(<=) 大于等于(>=) 等于 (==) :对非数值应用时,会转换成数值比较。如果两个字符串进行比较会比较字符串对应的字符编码值。
6.流控制语句:if() while() for-in :将条件隐式转换为布尔值,
7. .语句之前的内容 :会被转换为对象,基本类型会转换为相应的包装类型。

JS中有哪些识别类型的方法(包括用于识别某种具体类型的方法)

typeof

exp: typeof 12; //”number”
typeof 是操作符
可以识别标准类型(null除外)
不能识别具体的对象类型(Function除外)

instanceof

exp: /\d/ instanceof RegExp; //true
不能判别原始类型
判别所有对象类型

Object.prototype.toString.call

常封装成 function type(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
}
可识别标准类型及内置对象类型
不能识别自定对象类型

constructor

exp: “jerry”.constructor === String;

判别标准类型(Undefine和null除外)

function getTypeOf(obj){ return obj&&obj.constructor&&obj.constructor.toString.match(/function\s([^(])/)[1]; }

obj.constructor 的作用是防止后面执行错误
obj 的作用是防止后面执行错误
此方法可以识别所有类型

1人推荐
随时随地看视频
慕课网APP