美文网首页
JS中的{} + [] 和 [] + {}

JS中的{} + [] 和 [] + {}

作者: 风雅欢乐 | 来源:发表于2020-04-29 20:39 被阅读0次

在Js中,由于它的弱类型语言特性,存在大量的隐式转换。基础类型(即string, boolean,number,null,undefined等)相加,可以参考网上的资料。那么,复杂类型(即对象、数组、自定义类)等相加的情况如何呢?

答案是,复杂类型相加,分成三步:
1、首先调用其valueOf方法,将它转换成基础类型;
2、如果valueOf的结果还不是基础类型,那么继续调用其toString方法,转换成基础类型;
3、若toString的结果仍旧不是基础类型,报错。

那么,在[] + {}的情况中:

[].valueOf() ---> []
{}.valueOf() ---> {}
[].toString() ---> ''
{}.toString() ---> '[object Object]'
[] + {} ---> '[object Object]'

而在{} + []的情况中:
{}被JavaScript解释器当作代码段,实际的运算是+ []

+ [] ---> + '' ---> 0

实际结果是0

在这个例子中,如果手动改写Object和Array的原型上的valueOf默认方法,那么得到的结果就将不同。

相关文章

  • js中的 || 和 &&

    ||和&& var a = a || {}在js中,|| 以及 &&,进行运算,返回的东西,一般不是true或者f...

  • JS中的{} + [] 和 [] + {}

    在Js中,由于它的弱类型语言特性,存在大量的隐式转换。基础类型(即string, boolean,number,n...

  • JS中的 || 和 &&

    &&: 输入表达式的第一个falsy值,如果都为真,输出最后一个truey值比如:1 && null && 2 /...

  • js中的&&和||

    js中&&运算符优先级大于|| ?&& 和 || 的作用只有一个(定义):进行布尔值的且和或的运算。当运算到某一个...

  • js中的!!和!

    自己之前判断常用if(a)判断a有值或是true,if(!a)判断a没值或是false的但是看到有的人会用if(!...

  • js 中==和===

    js是弱类型语言,==比较时会进行隐式转换。比如 1 == '1'是true,因为会把他们自动转化为数字进行处理。...

  • 单引号和双引号

    JS中 js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和...

  • 概念集合

    JS中的数组和Arrary的区别 js中的数组就是array对象

  • js中 == 和 === 的区别

    今天看一些项目文档,找到了一个ele的node面试文档,里面总结了一些招聘问题,我感觉还是有点干货中文地址Engl...

  • js中 !==和 !=的区别

    在使用var result = this.$storage.getSync('versionText');时,发现...

网友评论

      本文标题:JS中的{} + [] 和 [] + {}

      本文链接:https://www.haomeiwen.com/subject/hpsmyctx.html