JavaScript的一道加法题?

var a = +[]

别用控制台,能说出来是多少?

分析分析到底是啥原理:

加法运算

1、加号运算符只能用于原始数据类型,对于对象类型的值,需要进行数据转换

2、在转换后,如果其中一个运算元出现原始数据类型是“字符串”类型值时,则另一运算元强制转换为字符串,然后做字符串的连接运算

3、在其他情况时,所有运算元都会转换为原始数据类型的“数字”类型值,然后作数字的相加

Number() 转换规则

1.如果是 Boolean 值,true 和 false 将分别转换为 1 和 0。
2.如果是数字值,只是简单的传入和返回。
3.如果是 null 值,返回 0。
4.如果是 undefined ,返回 NaN。
5.如果是字符串,遵循下列规则:

(1) 如果字符串截去开头和结尾的空白字符后,不是纯数字字符串,那么最终返回结果为 NaN

(2) 如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123,而“011”会变成11(前导的零被忽略了);

(3) 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样也会忽略前导零);

(4) 如果字符串中包含有效的十六进制格式,例如 0xf,则将其他转换为相同大小的十进制整数值;

(5) 如果字符串是空的(不包含任何字符),则将其转换为 0;

(6) 如果字符串中包含除上述格式之外的字符,则将其他转换成 NaN

6.如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()
方法,然后再次依照前面的规则转换返回的字符串值。

示例

console.log(Number(undefined)) // NaN
console.log(Number(null)) // 0
console.log(Number(NaN)) // NaN
console.log(Number(‘‘)) // 0
console.log(Number({})) // NaN
console.log(Number({a:1})) // NaN
console.log(Number([])) // 0
console.log(Number([1])) // 1
console.log(Number([1,2])) // NaN

console.log(String(undefined)) // ‘undefined‘
console.log(String(null)) // ‘null‘
console.log(String(NaN)) // ‘NaN‘
console.log(String({})) // ‘[object Object]‘
console.log(String({a:1})) // ‘[object Object]‘
console.log(String([])) // ‘‘
console.log(String([1])) // ‘1‘
console.log(String([1,2])) // ‘1,2‘

分析

1.+[],[] 是对象,依据第六条规则,转换的结果是 NaN,然后调用对象的 toString() 方法,得到 ‘‘ 空字符串,Number(‘‘) => 0,所以 +[] => 0,结果为数字 0

2.0 + [],得到 0 + ‘‘ => ‘0‘ ,结果为字符串 0

3.{} + [],得到 ‘[object Object]‘ + ‘‘ => ‘[object Object]‘,结果为字符串 [object Object]

其他以此类推可得。

结果

console.log(+[]) // 0
console.log(0 + []) // ‘0‘
console.log(0 - []) // 0
console.log([] + []) // ‘‘
console.log({} + []) // ‘[object Object]‘

你对了没?

原文地址:https://blog.51cto.com/14227711/2359869

时间: 2024-10-06 04:25:48

JavaScript的一道加法题?的相关文章

每天一道Java题[11]

题目 synchronized怎么实现线程同步?请修改<每天一道Java题[10]>中的MyRunnableThread类以解决三个线程都获取到10的问题. 解答 方法一: 采用synchronized关键字包裹需要保证线程安全的代码块,来实现线程同步.语法格式为: Synchronized(expression){ //需同步的代码 } <每天一道Java题[10]>中的MyRunnableThread类修改为: package me.huangzijian; public cl

每天一道Java题[3]

问题 为什么在重写equals()方法的同时,必须重写hashCode()方法? 解答 在<每天一道Java题[2]>中,已经对hashCode()能否判断两个对象是否相等做出了解释.equals()方法与hashCode()方法的关系如下: 如果两个对象的hashCode()返回值不一样,则equals()返回的结果必为false. 如果两个对象的hashCode()返回值一样的时候,equals()返回的结果未知. 如果两个对象的equals()返回的结果为true,则两个对象的hashC

java中,一个简单但出错率又大的‘加法’题,1+1+&#39;1&#39;+1+1+1+1+&quot;1&quot;=?

1+1+'1'+1+1+1+1+"1"=? 结果是多少?很多人看了题之后,可能会说结果是71.  当然有的童鞋可能会说很简单,放工具里运行一下就知道结果了,如果不运行代码,你会得出一个什么样的结果呢? 如果告诉你答案是551,会迷惑么?怎么会得出551? 下面我们来看看怎么算的: 1.我们大家都知道1 .'1'."1"的区别,1 表示一个int类型,’1'是表示一个char类型,"1" 表示一个字符串类型. 2.1+1+'1'+1+1+1+1+&

一天一道算法题---6.26---二分查找

感谢微信平台---一天一道算法题----每天多一点进步-- 好累啊  现在在用win7自带的输入法 打起来真麻烦 快点把这2天的搞完就重装了 还是直接来源于----〉 待字闺中 分析 给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] = i.假设A中的元素递增有序.且不重复,请给出方法,找到这个Magic Index.更进一步,当A中允许有重复的元素,该怎么办呢? 没有重复元素的情况 一些同学在遇到这个题目的时候,往往会觉得比较简单.

一天一道算法题--6.25--无定义

感谢微信平台---一天一道算法题--每天多一点进步---- 其实今天我接下去补上的几题都来自---待字闺中 所以我就原封不动的将它的题目与分析搬过来了 原题 给定一个数组,我们可以找到两个不相交的.并且是连续的子数组A和B,A中的数字和为sum(A), B中的元素和为sum(B).找到这样的A和B,满足sum(A) - sum(B)的绝对值是最大的. 例如:[2, -1 -2, 1, -4, 2, 8]划分为A=[-1, -2, 1, -4], B=[2, 8], 最大的值为16 分析 如果没有

一天一道算法题---6.27---二分图

感谢微信平台---一天一道算法题---每天多一点进步--- Ah... last... 也很晚了 快2点半了 C罗也告别这届世界杯了  主要还是输给德国太多球了 美国也没赢 唉 还是来源于----> 待字闺中 原题 大家都知道facebook用户都是双向的好友,a是b的好友,那么b一定是a的好友,现在给定一个用户列表,其中有些用户是好友,有些不是,请判断,这些用户是否可以划分为两组,并且每组内的用户,互相都不是好友.如果能,请给出这个划分. 例子1: 用户:{1, 2, 3} 好友关系:1-2,

前端面试的一道算法题

(使用canvas解答) 下面说一个跟前端有点相关并且有点趣的一道算法题. 题目: 平面上有若干个不特定的形状,如下图所示.请写程序求出物体的个数,以及每个不同物体的面积. 分析 想要知道有多少个图形,想到的就是先获取图片中的每一个像素点然后判获取像素点的背景颜色(RGBA).想要获得图片中的每一个像素点,那就可以联想到使用h5的canvas.如下: 菜鸟教程中canvas的getimagedata方法http://www.runoob.com/tags/canvas-getimagedata.

一天一道算法题--6.19--二分搜索

感谢微信平台---一天一道算法题---每天多一点进步 这是昨天的 只贴下题目 == 再把今天的也是一样处理了   这2天 不想写 可能晚上会有改变吧.. problem: 给定一个最多包含40亿个随机排列的32位 二进制的无符号整数 找出不在文件中的数.显然 由于 2^32=4294967196大于4亿 所以缺少的数不止一个 现限制只能使用几个外部的临时文件和仅几百个字节的内存. ****************************** 过了明天 就没事了 =-= 一天一道算法题--6.19

一道推理题

题目:http://115.28.76.232/problem?pid=1115 题意:初始给定两个完美数1和3,如果都是完美数,那么也是完美数.现在给定一个数,判断 它是否是完美数. 分析:嗯,这道题Mayuyu有两种方法,第一种方法是按照题意有,那么我们进行递归直接判 断.这样做的时间复杂度很高,通过打表对一些数的观察发现,只需要看这个数是否只由3和5组成. 打表代码: #include <iostream> #include <string.h> #include <s