【自学笔记】web前端 javascript笔试题 关于各种==的比较,js隐式转换
2016-09-20 16:17
477 查看
大家在笔试前端的时候可能会经常遇见各种 == 相关的比较选择题,个人总结了一下并给予了解释,希望对大家用用处,有错还请指出。
在此之前,大家必须了解一些知识
比较中的转换算法
重点就在于4到9
Number与String进行比较时,将String转换为Number继续执行比较算法
当Object与Number、String进行比较时,将Object转换为String继续执行比较算法
当比较中出现Boolean型时,无论对象是啥,将Boolean转化为Number继续执行比较算法
数据类型转化为Boolean的规则
String的 “” 转换为Boolean为false其他都为true
Number的0和NaN转换为Boolean为false其他都为true
Object的null转换为Boolean为false其他都为true
Undefined转换为false 不能转换为true
例:
各种例子:
因为变量undefined为定义,typeof undefined == undefined,
undefined与null比较,参见图片第3条,结果true
本人新手,说实话写这个查了不少资料,有疑问可以直接回复
注意:图片文档里的8,9的 ToPrimitive(),并非就代表toString(),而代表的是valueOf() 和 toString() 。
顺序:先执行 valueOf(),若得到的值非Number型,再执行toString() ,[] == ![] 这个例子中的3,[]先执行了valueOf(),返回的结果为空引用,则才执行toString返回 “” 。
在JavaScript的==中,总倾向于把双等号两边的值往Number类型转换,而非Boolean类型
在此之前,大家必须了解一些知识
比较中的转换算法
重点就在于4到9
Number与String进行比较时,将String转换为Number继续执行比较算法
当Object与Number、String进行比较时,将Object转换为String继续执行比较算法
当比较中出现Boolean型时,无论对象是啥,将Boolean转化为Number继续执行比较算法
数据类型转化为Boolean的规则
String的 “” 转换为Boolean为false其他都为true
Number的0和NaN转换为Boolean为false其他都为true
Object的null转换为Boolean为false其他都为true
Undefined转换为false 不能转换为true
例:
[] == ![] //true 1.由于!的优先级比较高,先执行![],[]是空数组,数组是对象,由2.3(需要了解的知识文字序号),则[]转换为boolean结果为true,![]结果就为false,表达式变为判断 []==false 2.根据1.3,将false转为Number,结果为0,表达式变为判断 [] == 0 3.根据1.2,将[]变为String,结果为"",表达式变为判断 "" == 0 4.根据1.1,将""变为Number,结果为0,表达式变为判断 0 == 0 返回结果 true
各种例子:
var undefined; undefined == null; // true
因为变量undefined为定义,typeof undefined == undefined,
undefined与null比较,参见图片第3条,结果true
console.log(1 == true); //文字1.3,Number(true) = 1 -> 1 == 1 true console.log(2 == true); //文字1.3,Number(true) = 2 -> 2 == 1 false console.log(0 == false);//文字1.3,Number(false)= 0 -> 0 == 0 true console.log(NaN == NaN);//图片1.c.i/1.c.ii false console.log({} == {});//图片1.f {}是对象,比较引用指向的空间,因为是两个不同的空对象,地址也不一样 false console.log([] == []);//同理 console.log(null == 0);//文字1.2 null是对象,String(null) == "null" -> "null" == 0 ,文字1.1 Number("null") == NaN -> NaN == 0 false console.log(undefined == 0);//这里将执行String(undefined),之后执行步骤同上
本人新手,说实话写这个查了不少资料,有疑问可以直接回复
注意:图片文档里的8,9的 ToPrimitive(),并非就代表toString(),而代表的是valueOf() 和 toString() 。
顺序:先执行 valueOf(),若得到的值非Number型,再执行toString() ,[] == ![] 这个例子中的3,[]先执行了valueOf(),返回的结果为空引用,则才执行toString返回 “” 。
在JavaScript的==中,总倾向于把双等号两边的值往Number类型转换,而非Boolean类型
相关文章推荐
- 【Web前端学习笔记】Javascript_01_变量,数据类型,类型转换
- js中,关于不同类型比较,各种类型的转换原则
- 【web前端技术】八款JS(javascript)常用开发框架介绍及比较(web前端开发框架)
- 关于javascript js获取各种浏览器可见窗口大小
- JavaScript-JS命名空间的构造和实现-[web前端开发]
- 自学javascript笔记_自用_解析W3school的代码_JS对象
- Web前端从入门到放弃(js数组基础和数组方法的各种使用)
- 【自学笔记】js JavaScript callback()执行线性动画
- web前端-关于javascript开发的重要知识点
- JavaScript学习笔记——数据类型强制转换和隐式转换
- 自学javascript笔记_自用_解析W3school的代码_JS对象
- JavaScript的类型转换( 本贴来自网易前端微专业的个人学习笔记 )
- 关于Android4.2后WebView的js方法需要加@JavascriptInterface
- 关于Web前端及百度web前端笔试面试题目
- JS各种类型问题与隐式类型转换
- 关于Web前端开发,附:(百度web前端笔试面试题目)
- Firefox 插件 JSview是一套比较实用的JS,CSS文件查看工具,很方便,很快捷地查看页面引用了哪些文件,作为Web前端开发者是一套必备的插件,由于Firefox升级过快,插件很快不兼容了,这里对插件做了一些调整,可以兼容最新Firefox浏览器(目前FireFox 21)
- 关于js隐式转换的有趣例子
- js数据类型隐式转换笔记以及js包装对象
- web前端 关于IE8,7,6兼容问题笔记<四处收集>