关于JavaScript中的==与!的转换问题
最近遇到了一道很有趣的JavaScript试题,感觉很有趣。记录一下免得以后面试遇到
题目是:
console.log([]==![],{}==!{},[]==!{},{}==![])
这道题考察的主要是==号的隐式转换,
对象无论在有没有数据的情况下都为true,所以当console.log({}!{})时相当于true!true所以结果为false。
当用双等号判断[]![]时是按照ToNumber算法来转换的,空数组[]用ToNumber算法转换成0也就是false,而!运算符是使用ToBoolean算法来转换的应为空数组也是对象所以![]转化成!true,所以console.log([]![])时相当于false==false,所以结果为true.
同样的道理最后console.log({} == ![]),应为对象无论在何种情况下都为true,而![]采用ToBoolean算法来转换,相当于!true,所以结果相当于true == !true结果为false。
关于JavaScript中的==与!的转换问题的更多相关文章
- Javascript中双等号(==)隐性转换机制 JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密
Javascript中双等号(==)隐性转换机制 在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否 ...
- Javascript中双等号(==)隐性转换机制
在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等). 因此有几个常识知识: 1.对于strin ...
- JavaScript中关于隐式转换的一些总结
JavaScript运算符中的隐式转换规律:一.递增递减运算符(前置.后置)1.如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类 ...
- (二)javascript中int和string转换
在javascript里怎么样才能把int型转换成string型 (1)var x=100 a = x.toString() (2)var x=100; a = x +""; // ...
- (转载)JavaScript中的日期格式转换
(转载)http://www.php100.com/html/webkaifa/javascript/2008/1229/1618.html 今天做页面需要把JS里面的Date规范输出为“YYYY-M ...
- javascript 中ASCII字符值转换
char-->ascii var a = "123"; a.charAt(1).charCodeAt();ascii-->char String.fro ...
- 【前端】深入浅出Javascript中的数值转换
由于Javascript是一门弱类型的语言,在我们的代码中无时无刻不在发生着类型转换,所以了解Javascript中的类型转换对于了解我们认识Javascript的运行原理至关重要. 本文主要从数值转 ...
- JavaScript中基本数据类型之间的转换
在JavaScript中共有六种数据类型,其中有五种是基本数据类型,还有一种则是引用数据类型.五种基本数据类型分别是:Number 数值类型.String 字符串类型.Boolean 布尔类型, nu ...
- HTML5学习笔记(二十):JavaScript中的标准对象
这里提到的标准对象指ECMAScript中定义的对象,无论JavaScript运行那种环境(浏览器.Node.js)下都存在的对象. typeof 在JavaScript的世界里,一切都是对象. 但是 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
随机推荐
- UVA 10801 多线程最短路
题意:一栋摩天大楼从0层到K层,有N部电梯,每个电梯都有自己的运行速度,此外,对于某个电梯来说,并不是每一层都会停,允许在某一层进行电梯换乘,每次换乘固定消耗60秒,最终求从0层去K层的最短时间,如果 ...
- Java线程——线程之间的几点重要说明
在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...
- gcc和g++的区别解析
1.误区:gcc只能编译C源代码,g++只能编译C++源代码 解析:其实gcc和g++都可以编译c/c++源代码,只是细节不同,后缀名为.c的源文件,gcc将其当作C程序,而g++则当作c++程序来处 ...
- UML-迭代1-基础
1.原则 1).拆分成多个按时间定量.风险驱动的迭代(细化1.细化2.细化3.细化4) 2).在多个迭代中,对同一用例增量开发. 2.最佳实践 设计人员:对架构的核心和风险做适当设计.实现和测试 研发 ...
- C++数组常用操作
1. 遍历数组 使用基于范围的for循环来遍历整个数组 用_countof()来得到数组中的元素个数 #include <iostream> #include <cstdio> ...
- leetcode 17 电话号码的数字组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. class Solution { List<String ...
- java去掉数字后面的0
有些财务业务场景是需要把数字多余的0去掉的. 可以这么写 private String getRealData(BigDecimal num) { if (num == null) { return ...
- 14 微服务电商【黑马乐优商城】:day04-ES6语法入门
day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) :day02-springcloud(理论篇二) :day ...
- Python数据分析与展示第0&1周学习笔记(北理工 嵩天)
一前奏 1..Python语言开发工具选择 IDLE:自带默认常用入门级 PyCharm:简单.集成度高 Anaconda:awesome IDE较为简单,不做详细记录. 二.表示 1.numpy库入 ...
- BaseAdapter教程(2) BaseAdapter的notifyDataSetChanged动态刷新
遇到了这麽一个需求,ListView滑到最底,然后会自动在底部加入新的Cell,实现动态刷新. 1. 首先,为ListView加上setOnScrollListener. lvHomePostItem ...