视频链接:JavaScript加法运算 - Web前端工程师面试题讲解

数值 + 数值

首先看菜鸟教程有关于数值对象的教程

JavaScript Number 对象

可以知道Infinity , -Infinity 和 NaN 都是 JavaScript 保留字,不能用作标识符,对大小写敏感,此外NaN也是特殊的非数值。

//NaN+数值仍是NaN
console.log(88+ NaN);
//无法确定哪个无穷
console.log(Infinity+ -Infinity);
console.log(Infinity+ Infinity);
console.log(-Infinity+ -Infinity);

得出的结果如下:


注意:浏览器输入 +00 在浏览器console.log都会输出 0



在开发者F12模式下的控制台,确实输出0。

那么下面

console.log(+0 + +0);
console.log(-0 + -0);
//正0 加个 负0 还是正0,挺奇怪的
console.log(+0 + -0);

最终效果如下,都是默认+0没有+号:


字符串 + 字符串

就是两个字符串拼接合并

console.log("Hello " + "World");

最终效果如下:


字符串 + 数值

最终都会输出字符串,所以加下来要注意优先级和字符串的位置对该加法运算的影响

console.log("10" + 10.10);
console.log(typeof ("10" + 10.10));



它的变化是由于"10"在前,那么会令10.10变为"10.1",最终像字符串+字符串那样变为了"1010.1"

那么后面例子类似的:

console.log("1" + 2 + 3 + 4);
console.log(1 + 2 + 3 + "4");
console.log(1 + ( 2 + "3" ) + 4);

效果如下:

它们的实现逻辑如下:






字符串 + ?

最终还是类似上面的把未知类型的数值变为字符串,最后合并成一个新的字符串

console.log("1" + NaN);
console.log("1" + Infinity);
console.log("1" + -Infinity);
console.log("1" + true);
console.log("1" + false);
console.log("1" + undefined);
console.log("1" + null);

结果如下:


如果是数组的话则是

console.log("1" + []);
console.log("1" + [123] );

运算逻辑如下:

视频中有个比较的特别的例子,如果数组只有三个逗号去相加的话,默认去掉数组中最后一个逗号不识别。

console.log("1" + [,,,] );

那么得到的结果为:

接下来的例子也没什么特别的了,它的相加步骤也很好猜:

console.log("1" + [123,456,789,'aaa']);


字符串 + 函数/对象

console.log("1" + function uu(){var a = 1;});
console.log("1" + {} );
console.log("1" + {a:1} );

可以看到对象经由console.log 后变为 [object,Object],其中第一个o是小写的

在视频中老师也提道只有花括号去转toString()函数,它是不能识别的,认为它就是个空代码块。

无论是使用document.write还是console.log()都是会最终返回[object Object],而当我像蛋老师那样在开发者模式下的控制台输入同样的内容才会报错。

console.log({}.toString());

未使用控制台输入的结果

蛋老师输入控制台的结果


数组 + 布尔类型

console.log(11 + true);
console.log(11 + false);

true变为1,而false变为0


数组 + 数组

数组会变为字符串类型,而最后就变为了 字符串 + 数组 的情况了

console.log([] + 1);
console.log([123] + 1);
console.log([123,456,789] + 1);
console.log([,2,,] + 1);


数组 + 函数/对象

还是同样的,数组变为字符串,函数也因此变为字符串,对象变为[object Object]

console.log([12,12] + function(){var a =0;});
console.log([] + function(){var a =0;});
console.log([12,12] + {});
console.log([12,12] + {a:1});


经典面试题(从左往右运算)

console.log([] + {});
console.log({} + []);
console.log(({}) + []);
console.log((function a() {var aa = 0;}) + {});



注意如果是在浏览器的控制台输入{}+[]的话

console.log([1,2]+function a(){var aa = 0});

【前端面试】(二)JavaScript加法运算的更多相关文章

  1. 前端面试之JavaScript的基本数据类型!

    前端面试之JavaScript的基本数据类型! JS的基本数据类型 数字 字符串 布尔值 JavaScript中有两个特殊的原始值: null (空) 和undefined (未定义), , 它们不是 ...

  2. 前端面试之JavaScript中数组的方法!【残缺版!!】

    前端面试之JavaScript中数组常用的方法 7 join Array.join()方法将数组中所有元素都转化为字符串并连接在-起,返回最后生成的字 符串.可以指定一个可选的字符串在生成的字符串中来 ...

  3. 前端面试之JavaScript中的闭包!

    前端面试之JavaScript中的闭包! 闭包 闭包( closure )指有权访问另一个函数作用域中变量的函数. ----- JavaScript 高级程序设计 闭包其实可以理解为是一个函数 简单理 ...

  4. 前端面试回顾---javascript的面向对象

    转:https://segmentfault.com/a/1190000011061136 前言 前一阵面试,过程中发现问到一些很基础的问题时候,自己并不能很流畅的回答出来.或者遇到一些基础知识的应用 ...

  5. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

  6. 前端面试之Javascript

    1,JS基本的数据类型和引用类型: (1)基本数据类型:number,string,null,undefined,symbol--栈: (2)引用数据类型:object,array,function- ...

  7. 前端面试整理——javascript算法和测试题

    (1)算法: 1.斐波那契数列:1.1.2.3.5.8.13.21.输入n,输出数列中第n位数的值. 方案一: function fn(n){ var num1 = 1, num2= 1, num3 ...

  8. 前端面试之JavaScript中this的指向【待完善!】

    JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...

  9. web前端面试第一次[javascript函数和方法的区别]

    //函数 function f1(){ console.log("我是函数"); } //调用函数 f1(); //创建一个空对象 var obj = {} //把函数定义到对象里 ...

随机推荐

  1. Java学习day4

    今天学习了String以及StringBuider 其中较为重点的除了用法以外,还有,String对象以""方式给出的字符串,只要字符序列相同(即顺序和大小写)无论在代码中重复几次 ...

  2. MySQL事务提交流程详解

    MySQL事务的提交采用两阶段提交协议, 前些日子和同事聊的时候发现对提交的细节还是有些模糊,这里对照MySQL源码详细记录一下,版本是MySQL5.7.36. 一. 事务的提交流程. 1. 获取 M ...

  3. JavaScript基础第02天笔记

    JavaScript基础第02天 1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用 ...

  4. sql语句——DML

    DML:增删改表中数据 1. 添加数据: * 语法: * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); * 注意: 1. 列名和值要一一对应. ...

  5. 2022.02.21 SA

    2022.02.21 SA 当我年少轻狂时,我曾拥有自由,但我并不明白它的意义.我曾拥有时间,但我没有意识到它的珍贵.我曾拥有爱,但我从未用心去体会.数十年的时间考验后,我终于理解了三者的真谛. 我已 ...

  6. 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)

    2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...

  7. 【CSAPP】Data Lab实验笔记

    前天讲到要刚CSAPP,这一刚就是两天半.CSAPP果然够爽,自带完整的说明文档,评判程序,辅助程序.样例直接百万组走起,管饱! datalab讲的是整数和浮点数怎么用二进制表示的,考验的是用基本只用 ...

  8. java基础4.18

    1.java的"一次编写,处处运行"如何实现?: 答:java之所有能实现一次编译,到处运行,是因为java在每个系统平台上都有java虚拟机(jvm),java编译的中间文件cl ...

  9. js实时查询,为空提示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. EF Core 配置模型

    0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...