5 19. [] + [1] + 2 20. 1 + 2 + "3" 结果和分析 true + false 试图在两个布尔值之间使用加法运算符(+)时,它们会被转换为数字。...,数学上的0.1和0.2在计算机中只能用近似的数字表示。...1/0 === 10 1000** 虽然1/0和之前一样也是一个非法的数学表达式。但是当除数不是0时,JavaScript认为这个表达式的结果是Infinity。...""- 1 虽然加法运算符(+)同时用于数字和字符串,但减法运算符(-)对字符串没有用处,所以JavaScript将其解释为数字之间的操作。一个空的字符串会被类型强制为0。...实际发生的情况是,它试图将字符串转换为数字,但失败了。 Number("true"); // -> NaN 在JavaScript的数字运算中,只要有一个值是NaN,运算的最终结果就一定是NaN。
JavaScript运算符完全攻略 JavaScript 定义了 47个运算符,另有 4 个存在争议的运算符。它们具有多重功能,在不同环境中可能会执行不同的操作,而且它们拥有更高的优先级(15级)。...例如,两个数相加、两个值比较大。大部分运算符都需要操作数配合才能够完成运算。 三元运算符:一个运算符必须包含三个操作数。JavaScript 中仅有一个三元运算符——条件运算符?...相加,结果是NaN 示例2 加运算符能够根据操作数的数据类型,决定是相加操作,还是相连操作。...例如 HTTP 请求中查询字符串一般都是字符串型数字,可以先把这些参数值减去 0 转换为数值。这与调用 parseFloat() 方法的结果相同,但减法更高效、快捷。...1 console.log(++c); //返回6,先递增,再赋值,运算结果加1 console.log(c); //返回6 递增和递减是相反的操作,在运算之 前都会试图转换值为数值类型,如果失败则返回
已收录,有一线大厂面试完整考点、资料以及我的系列文章。 JavaScript是一种非常容错的编程语言,许多在其他编程语言中不合法的表达式在JavaScript中都能正常工作。 这导致了很多奇怪的代码。...,数学上的0.1和0.2在计算机中只能用近似的数字表示。...1/0 === 10 1000** 虽然1/0和之前一样也是一个非法的数学表达式。但是当除数不是0时,JavaScript认为这个表达式的结果是Infinity。...""- 1 虽然加法运算符(+)同时用于数字和字符串,但减法运算符(-)对字符串没有用处,所以JavaScript将其解释为数字之间的操作。一个空的字符串会被类型强制为0。...实际发生的情况是,它试图将字符串转换为数字,但失败了。 Number("true"); // -> NaN 在JavaScript的数字运算中,只要有一个值是NaN,运算的最终结果就一定是NaN。
如果您是初学者,您可以阅读此文章来深入了解 JavaScript。我希望这个文章会激励你花更多的时间阅读规范。如果您是专业开发人员,您可以将这些示例视为您公司新手访问问题和测验的重要资源。...在 37 处,不再有可以生成的有效数字集,并返回 NaN 。...这就是为什么我们可以进行进行布尔值相加并得到正确的结果 相应部分: 12.5.6 一元 + 运算符 12.8.3 加法运算符(+) 7.1.3 ToNumber(argument) 17....三个数字的比较 1 true 3 > 2 > 1; // -> false 说明: 为什么会这样呢?其实问题在于表达式的第一部分。...在相加之前,[] 和 {} 隐式调用 ToPrimitive 和 ToString 方法。 25.
//undefined //如果一个变量声明未赋值就是undefined 未定义数据类型 var shanyu; console.log(shanyu+'1');//和字符串相加结果是...undefined1 console.log(shanyu+1);//和数字相加结果是NaN // null空值 var space = null; console.log...(shanyu+'1');//undefined1 console.log(shanyu+1);//NaN (3)如何检测数据类型 在JavaScript里面呢12和...alert('您最终的结果是' + result); 有的同学可能会问,为什么不可以这样alert(‘您最终的结果是’ + one_num+two_num); 答:是因为前面有...“‘您最终的结果是’”这句话,这句话是一个字符串,这个会首先和第一个数相加,然后变成一整个字符串,最终再加上第二个数字,结果肯定都是字符串了!
现在,最小的正数是Number.NEGATIVE_INFINITY,尽管这在严格意义上并不是真正的数字。 “为什么在JavaScript中为0小于Number.MIN_VALUE”?...对于 0 到 23 进制,没有可以转换的数字,因此返回NaN。在 24 进制时,将第14个字母的“n”可以转换位数字。在31进制时,第二十一个字母“u”,解码整个字符串。...在37时,不再有可以生成的有效数字集合,所以返回NaN。 [“parseInt(null,24) === 23…等等,什么?...这就是为什么我们可以与布尔值相加,视为常规数字并获得正确的结果。...以下是Number的属性列表: 20.1 Number Objects 三个数字比较 1 true 3 > 2 > 1 // -> false ?说明: 为什么这样呢?
变量的数据类型 为什么需要数据类型 在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型。而且,不同的数据类型,寓意也不同。...NaN NaN:是一个特殊的数字,表示Not a Number,非数值。...比如: console.log("abc" / 18); //结果是NaN console.log("abc" * "abcd"); //按理说,字符串相乘是没有结果的,但如果你非要让JS去算,...结果是NaN 注意:typeof NaN的返回结果是 number。 Undefined和任何数值计算的结果为 NaN。NaN 与任何值都不相等,包括 NaN 本身。...它们虽然相似,但还是有区别的,其中一个区别是:和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。
JavaScript 数据类型隐式转换 面试题 在讲 JavaScript 的数据类型隐式转换前,我们先看道面试题: console.log(new String("abc") == true);...a.valueOf()获取到的不是基本类型,调用a.toString()得到'[object Object]''[object Object]'==1; // 两边类型不致,左侧转成数字NaN==1;...这就需要我们了解相应的规则,为了方便描述,我们把+号左侧的值叫做 A,右侧的叫做 B: 第一步:如果 A 和 B 都是 number 类型,直接相加; 第二步:接下来看 A 或 B 中是否有一个是否为...,返回之; 否则调用 toString(),如果执行结果是基础类型,返回之; 无法得到原始值,抛异常。.../5 undefined 和非空字符串转成 NaN 5 - undefined // NaN5 - 'a' // NaN 可以转成数字的字符串转成数字 5 - '1' //4
当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。 —- 引用自MDN 1....在比如使用数组的sort方法排序: var a=[1,10,6,100].sort() 结果是: [1, 10, 100, 6] 原因是sort()方法默认的比较规则会先把每个元素转成字符串,然后比较字符串的...这就需要我们了解相应的规则,为了方便描述,我们把+号左侧的值叫做A,右侧的叫做B: 第一步:如果A和B都是number类型,直接相加; 第二步:接下来看A或B中是否有一个是否为string类型,如果有,...(),如果执行结果是基础类型,返回之; 无法得到原始值,抛异常。...和非空字符串转成NaN 5 - undefined // NaN5 - 'a' // NaN 可以转成数字的字符串转成数字 5 - '1' //4
,也是在该精度内无限接近零的数字。...— StackOverflow 上的“为什么在 JavaScript 中 0 小于 Number.MIN_VALUE?”...它可以转换字符串形式表达的整数和浮点数,以及非字符串值 true、false 和 null。如果它不能解析特定的值,它将转化为 NaN。...根据规范,该方法的返回值为: 如果参数是 true,返回 1。如果参数是 false,则返回 +0。 因此我们可以将布尔值相加并得到正确的结果 5....三个数字的比较 1 true 3 > 2 > 1; // -> false 说明:为什么会这样呢?其实问题在于表达式的第一部分。
但js中的运算也有和Java的不同之处; ? ①变量之间的运算 在js中,不同数据类型之间的变量也能运算。...100和true相加结果竟然是101,这在Java中会直接报错,因为不确定结果是什么数据类型。...所以在js中,true参与运算时就相当于数字1,同理false就相当于数字0,null也是相当于数字0 ②undefined类型参与运算 变量c没有定义,所以是未定义类型,当其参与运算时得到的结果为NaN...未定义类型和非字符串任意类型运算时,得到的结果都是NaN。 NaN,全称not a number,不是一个数字。...此外,未定义数据类型逻辑判断也为false,在算术运算中的NaN作为逻辑判断时也为false。 我就不一一演示了。
——结果是false: console.log(NaN === NaN); // logs "false" 一种半可靠的方法来测试一个数字是否等于 NaN,是使用内置函数 isNaN(),但即使使用...因此,JavaScript将 "2" 的类型转换为数字,然后应用一元 + 号(即,将其视为一个正数)。其结果是,接下来的运算就是 1 + 2 ,这当然是 3。...先是 "1" 变为 1,然后当应用 - 时又变为了 -1 ,然后将其与 1相加,结果为 0,再将其转换为字符串,连接最后的 "2" 运算对象,得到 "02"。...例5: "A" - "B" + "2" 输出: "NaN2" 说明:由于运算符 - 不能被应用于字符串,并且 "A" 和 "B" 都不能转换成数值,因此,"A" - "B"的结果是 NaN,然后再和字符串..."2" 连接,得到 "NaN2" 。
# JavaScript 数据类型 数据类型简介 为什么需要数据类型 变量的数据类型 数据类型的分类 简单数据类型 基本数据类型 数字型 Number 字符串型 String 获取变量数据类型 获取检测变量的数据类型...字面量 数据类型转换 什么是数据类型转换 转换为字符串 转换为数字型(重点) 转换为布尔型 # 数据类型简介 # 为什么需要数据类型 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据...变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。JavaScript 是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。...// 2.十六进制数字序列范围:0~9以及A~F var num = 0xA; 现阶段我们只需要记住,在JS中八进制前面加0,十六进制前面加 0x # 数字型范围 JavaScript中数值的最大和最小值...字符串的拼接 + 只要有字符串和其他类型相拼接 最终的结果是字符串类型 console.log('frx'+10);//frx10 console.log('pink'
NaN首先要介绍的是在 JavaScript 中让人又爱又恨的 NaN , NaN 的全名为: Not a Number ,翻成中文就是这个值并不是一个数字,通常都会发生在进行数字的转换上会返回的结果,...其实也不难想像为什么 JavaScript 会这样定义,回到笔者上面说的 NaN 通常都是发生在要转换成数字时发现不能用任何一个数字来表现,由于本身经过转换已经是数字的类型了,也因此 NaN 的类型才会是...相信大家看了应该都知道上面两个会输出 ab 以及 8 ,但这时候问题就来了,到底这个 + 是字符串的相加还是数字的相加呢?...由于 JavaScript 是个弱类型语言,因此在进行运算时都会先做类型转换的动作,假如转型后发现有字符串的话就会进行字符串的相加了,不然就是一般的数字相加。...相信看完上述的说明之后读者应该会觉得 + 这个运算符就是在做相加这件事情吧,但 JavaScript 有非常多看似很正常的运算符背后却不是做该运算符应该要做的动作,举例来说:console.log(+
Javascript 的隐式强制只是指 Javascript 试图将意外的值类型强制为预期的类型。...因此,您可以在需要数字的地方传递一个字符串,在需要字符串的地方传递一个对象等,它会尝试将其转换为正确的类型。这是最好避免的 Javascript 功能。...4 : 1 // 1数字表达式中的非数字值字符串每当您在涉及以下任一运算符的数字表达式中将字符串作为操作数传递时:-, *, /, %,数字的转换过程类似于对值调用内置Number函数。...这非常简单,任何仅包含数字字符的字符串都将转换为其等效的数字,但包含非数字字符的字符串将返回NaN....number) new Error("Only accepts arguments of type: number") //your code}所以如果我用 0 调用 add 函数,我总是会得到一个意想不到的错误
JavaScript 中 , 可以 将其他数据类型转换为布尔值 ; 如 : 在条件语句中 , 非布尔值会被自动转换为布尔值 ; 布尔值转换规则 : false、0、“”、null、undefined、NaN...数据类型 - Undefined 类型 1、Undefined 类型简介 在 JavaScript 中 , Undefined 类型 表示 变量没有被赋值 , 是 JavaScript 的基础数据类型之一...与 字符串 相加 , 其结果就是将 “undefined” 与其它字符串拼接得到的新字符串 ; undefined 与 数字 相加 , 得到的结果是 NaN , 非数字 值 ; 示例 : let undefinedVar..., Null 类型 是特殊的类型 , 表示一个空或不存在的引用 , 该类型只有一个值的数据类型 , 即 null 本身 ; Null 类型 和 Undefined 类型 都是假值 Undefined 类型...表示变量未被赋值 Null 类型 表示变量被明确赋值为一个空值 ; null 值 与 字符串 类型相加 , 相当于 “null” 与 字符串进行拼接 ; null 值 与 数字 相加 , 等于 数字本身
3 + true === 4,想知道为什么吗?那就跟我一起来探索这8个有趣的JavaScript等式吧。 ?...---- 3 + true == 4 我也没有开玩笑,在JavaScript中,当加号操作符放在number 和 boolean这两个类型的值之间的时候,boolean类型的值将会转化成number类型的值...如果你还记得我之前的JavaScript Showdown这篇文章,false == 0 和 true == 1,记得这个的话,3 + true 就转化成 3 + 1,然后我们就会得到4这个答案了。...多个数相加级联的结果是'21' 这里有事件链: 1 + 1 + '1' 2 + '1' '21' ---- ‘1’ + 1 + 1 当我们把字符串类型的值放在最前面会有什么改变呢?...当JavaScript在生成数字失败的时候,我们会得到NaN (Not A Number不是一个数字)这个值。 ---- 你做到了!
特殊数字 在 JavaScript 中有三个特殊的值,它们虽然是数字,但看起来却跟一般的数字不太一样。 前两个是Infinity和-Infinity,它们代表正无穷和负无穷。...自动类型转换 在引言中,我提到 JavaScript 会尽可能接受几乎所有你给他的程序,甚至是那些做些奇怪事情的程序。...当某些不能明显映射为数字的东西(如"five"或undefined)转换为数字时,你会得到值NaN。...NaN进一步的算术运算会产生NaN,所以如果你发现自己在一个意想不到的地方得到了它,需要寻找意外的类型转换。...在第二个和第三个值中,只有被选中的值才会求值。 本章小结 在本章中,我们介绍了 JavaScript 的四种类型的值:数字,字符串,布尔值和未定义值。
undefined的变量是在程序中声明但未赋予任何值的变量,如果程序试图读取未定义变量的值,则返回undefined的值。...问题 35:NaN 是什么 NaN 即非数值(Not a Number),NaN 属性用于引用特殊的非数字值,该属性指定的并不是不合法的数字。 NaN 属性 与 Number.Nan 属性相同。...当我妈妈叫沙雕的时候,虽然我的名字叫小智,但这并不是说我就突然就克隆了一个自己:我仍然是我,只是可以用不同名字来称呼我而已。...: parseInt("4F", 16) 问题 38:2+5+ 3的结果是什么 由于2和5是整数,它们将以数字形式相加。...这样做之后,当咱们试图引用一个被删除的foo属性时,结果是undefined。
我抓取了牛客上今年的线上面试题和面经,大约 500 左右道题,原生 JavaScript 的难点(闭包,eventLoop,this,手撕原生JS)考察的频率非常高。...因此我决定整理JavaScript中容易忽视或者混淆的知识点,写一系列篇文章,以灵魂拷问的方式,系统且完整的带大家遨游原生 JavaScript 的世界,希望能给大家带来一些收获。...Number.isNaN (推荐使用) 与 isNaN() 相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true。...{} 在 JavaScript 中,不止可以作为对象定义,也可以作为代码块的定义。...js 引擎会把 {} + 1 解析成1个代码块和1个+1,最终输出结果为 1 答案 1[object Object] 1 复制代码 第十三问:[]与{}的相加的结果是多少?
领取专属 10元无门槛券
手把手带您无忧上云