JavaScript 中 [] + [],[] + {},{} + [],{} + {} 的结果分别是什么
本质:二元操作符 + 规则
- 如果操作数是对象,则对象会转换为原始值
- 如果其中一个操作数是字符串的话,另一个操作上也会转换为字符串,进行字符串连接
- 否则,两个操作数都将转换成数字或 NaN,进行加法操作
对象转为原始数据类型的值
与下面三个方法有关,且存在优先级;首先调用第一个,第二个与第三个优先级依情况而定
- Symbol.ToPrimitive
- Object.prototype.valueOf
- Object.prototype.toString
[] 的原始值
typeof [][Symbol.ToPrimitive] // undefined,继续往下走
[].valueOf() // [],不是原始值,继续往下走
[].toString() // ''
{} 的原始值
typeof {}[Symbol.ToPrimitive] // undefined,继续往下走
({}).valueOf() // {},不是原始值,继续往下走
({}).toString() // '[object Object]'
[] + []
解题过程
- [].toString() + [].toString()
- ‘’ + ‘’
- ‘’
[] + {}
解题过程
- [].toString() + ({}).toString()
- ‘’ + ‘[object Object]’
- ‘[object Object]’
{} + [],易错
想当然的解题过程:
- ({}).toString() + [].toString()
- ‘[object Object]’ + ‘’
- ‘[object Object]’
可以在浏览器试一下,其实结果是 0
因为浏览器把 {} + []
解析成这样了 {}; + []
,也就是一个语句后面跟了一个 +[]
,+[]
相当于 + ''
,结果为 0
{} + {},易错
想当然的解题过程:
- 语句后面跟上
+{}
+ '[object Object]'
- NaN
那么答案是 NaN
吗?
对了,又没有完全对。{} + {}
在 IE 或 FireFox 等浏览器上的执行结果确实为 NaN
,但是在 Chrome 浏览器上执行结果为 '[object Object][object Object]'
Chrome 浏览器会对这段代码进行特殊处理,处理后为 ({} + {})
那么解题过程就为:
- (({}).toString() + ({}).toString())
- ‘[object Object][object Object]’
JavaScript 中 [] + [],[] + {},{} + [],{} + {} 的结果分别是什么相关推荐
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- 在Javascript中使用面向对象的编程
by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章.翻译不好的地方,还望大家指正,谢谢. 如果您需要,可以访问下面的地址取得 ...
- javascript中实例方法与类方法的区别
在javascript中,类有静态属性和实例属性之分,也有静态方法和实例方法之分 类属性(静态属性):通过类直接访问,不需要声明类的实例来访问 类方法(静态方法):通过类直接访问,不需要声明类的实例来 ...
- regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾
regexp 好汉字符串 by Catherine Vassant (aka Codingk8) 由凯瑟琳·瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScrip ...
- 让我们讨论一下变量,以及为什么要在JavaScript中使用它们。
by Zell Liew 由Zell Liew 让我们讨论一下变量,以及为什么要在JavaScript中使用它们. (Let's talk about variables - and why you ...
- JavaScript中的普通函数与构造函数比较
问题 什么是构造函数? 构造函数与普通函数区别是什么? 用new关键字的时候到底做了什么? 构造函数有返回值怎么办? 构造函数能当普通函数调用吗? this this永远指向当前正在被执行的函数或方法 ...
- django中的for循环_深入了解 JavaScript 中的 for 循环
在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循 ...
- JavaScript中 for、for in、for of、forEach等使用总结
在JavaScript中,我们经常需要去循环迭代方法操作数组对象等,常见等循环方法有 for.for in.for of.forEach等. 1.for循环 for循环是最基础常见的一种循环,圆括号中 ...
- JavaScript中的面向对象程序设计
本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...
- JavaScript中的call、apply、bind深入理解
一.函数的三种角色 首先要先了解在函数本身会有一些自己的属性,比如: length:形参的个数: name:函数名: prototype:类的原型,在原型上定义的方法都是当前这个类的实例的公有方法: ...
最新文章
- 设置释放COCOS2D-X 的启动流程
- 【新手教程】如何向App Store提交应用
- win7 win10下80端口被System进程占用的解决方法
- python学习书籍推荐-推荐python机器学习实践的书籍?
- laya 怎么生成签名_什么是数字签名
- nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url
- Redis的主从搭建
- drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化
- 论文 参考文献的格式说明
- 切洋葱怎么才不流泪?
- 小汤学编程之JavaEE学习day06——LayUI
- pph上传文件到window服务器,[upload_labs]文件上传绕过小结
- mongodb查询优化
- blogCommed
- python-snap7的安装记录
- 01企业网络高级解决方案
- 【STM32】几款常用产品(F1、F4、F7)的区别
- linux 下打包可执行程序
- 微信小程序 表情小作坊 — 轻松定制表情包 1
- 基于c语言的学生档案管理系统设计实现
热门文章
- LED的串联电阻值的计算
- 计算机视觉面试c++
- 硬件电气接线需要注意的问题汇总
- Apple usb Ethernet adapter for windows 驱动下载
- 产品策划五:App界面设计风格
- Oracle-----增、删、改数据
- scipy Matlab-style IIR 滤波器设计下(Elliptic \Bessel \IIR-notch\IIR-peak\IIR-comb)
- Python实现2ASK,2FSK和2PSK调制与解调
- FANUC机械手与康耐视相机搭配使用走socket通讯使用手册
- 鸿蒙os系统使用技巧,鸿蒙OS系统详解