JavaScript 中一些值的比较,熟悉规范
来源:互联网 发布:护眼有什么软件 编辑:程序博客网 时间:2024/06/07 19:57
[] == [];[] === [];{} == {};{} === {};
结果:都为false
var n0 = 123;var n1 = new Number(123);var n2 = new Number(123);var n3 = Number(123);var n4 = Number(123);n0 == n1; // truen0 == n3; //truen0 === n1; //falsen0 === n3; //truen1 == n2; //falsen1 === n2; //falsen1 == n3; //truen1 === n3; //falsen3 == n4; //truen3 === n4; //true
例:
console.log( [] == !{} ); //why true?
!{}是个布尔值,为false,因此我们比较的是 [] == 0;
Number([])是0,因此我们比较的是 0 == 0;
其实我们需要解决三个问题:
(1)new Number(123) == Number(123); //true
Number函数要么返回一个数字,要么返回Not A Number(如果参数没有办法被转化为数字),在这三个例子中,我们不必担心NaN的问题,所以Number(123)等价于数字123。
于是(1)变成 new Number(123) == 123,进入规范 11.9.3-8
11.9.3-8提示我们去找ToPrimitive(Object(123))是什么,于是我们到了8.12.8–default value,一看,哎呦我去,正好有个valueof能用,于是(1)变成了 123 == 123;,结束。
(2)new Number(123) == new Number(123); //false
比较分支进入 11.9.3-1.f,就是看着两个Object的引用是不是相等的,这里明显是不等的。
(3)Number(123) == Number(123); //true
太简单了,omitted。
思考:
'foo' == new function(){ return String('foo'); };// false, why?'foo' == new function(){ return new String('foo'); };// true, why?
0 0
- JavaScript 中一些值的比较,熟悉规范
- 16、在JavaScript中,命名的一些规范
- 一些比较好的java代码规范
- c++中一些个人不太熟悉的关键字
- 一些JavaScript编码规范
- 应熟悉的一些算法
- 一些比较早的Javascript作品
- 一些比较常见的Javascript框架简介
- javascript 中时间的比较
- 有没有对JS比较熟悉的?
- JavaScript中Promises/A+规范的实现
- 23种设计模式中,自己比较熟悉的6种模式
- 对JavaScript优化及规范的一些感想
- 熟悉border-image的一些特性
- 熟悉现代JavaScript的培训计划
- 在javascript中使用提示信息来熟悉当前的程序流程
- C/C++中if判断表达式的比较规范
- 网页中一些比较隐蔽的用法
- 华为路由器dhcp简单配置实例
- c++中的string常用函数用法总结
- 使用 ubuntu builder
- 构造函数语义学
- xshell或putty上 按小键盘上的数字键并不能输入数字的解决办法
- JavaScript 中一些值的比较,熟悉规范
- spark:kmeans测试
- Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRID
- 8B - Obsession with Robots
- Android中ProgressBar自定义进度条的高度、颜色、圆角
- jQueryUI中Datepicker(日历)插件的介绍和使用
- 在Activiti中使用UUID作为主键生成策略
- UITextField的字体和颜色和文字显示位子。
- shell脚本输出颜色字体