视频链接: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. Ant Design Pro V5 与 IdentityServer 实现 Password 模式的登录

    最近处于休息状态,想趁着休息时间,为自己做一个后台. 后端框架选用了 Abp.之前公司使用了一些自研的框架,但由于人力资源有限,后期框架的升级及维护都是比较耗时,这次干脆直接使用Abp,即省心又能快速 ...

  2. Java学习day9

    抽象类的关键字:abstract 类中有抽象方法时,需要在类名前也加上abstract关键字,即 public abstract class 类名{ } 同时,抽象类不能直接实例化,需要通过子类继承, ...

  3. Data详细解析

  4. Python夺命20问

    1.请观看下列代码并回答问题: import collections from random import choice Card = collection.namedtuple('Card', [' ...

  5. 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 ... 基于. ...

  6. Abp集成HangFire

    简要说明 后台作业在系统开发的过程当中,是比较常用的功能.因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入.批量发送短信通知等. ABP vNext 提供了后台作业 ...

  7. Python 函数进阶-递归函数

    递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...

  8. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  9. springcloud + nacos实现共用基础服务(灰度版本)

    背景: 当我们使用微服务时,若想在本地联调就需要启动多个服务,为了避免本地启动过多服务,现将注册中心等基础服务共用.当我们在服务A开发时,都是注册到同一个nacos,这样本地和开发环境的服务A就会同时 ...

  10. vue大型电商项目尚品汇(前台篇)day02

    现在正式回归,开始好好做项目了,正好这一个项目也开始慢慢的开始起色了,前面的准备工作都做的差不多了. 而且我现在也开始慢慢了解到了一些项目才开始需要的一些什么东西了,vuex.router这些都是必备 ...