【前端面试】(二)JavaScript加法运算
视频链接: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);
得出的结果如下:

注意:浏览器输入 +0 或 0 在浏览器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加法运算的更多相关文章
- 前端面试之JavaScript的基本数据类型!
前端面试之JavaScript的基本数据类型! JS的基本数据类型 数字 字符串 布尔值 JavaScript中有两个特殊的原始值: null (空) 和undefined (未定义), , 它们不是 ...
- 前端面试之JavaScript中数组的方法!【残缺版!!】
前端面试之JavaScript中数组常用的方法 7 join Array.join()方法将数组中所有元素都转化为字符串并连接在-起,返回最后生成的字 符串.可以指定一个可选的字符串在生成的字符串中来 ...
- 前端面试之JavaScript中的闭包!
前端面试之JavaScript中的闭包! 闭包 闭包( closure )指有权访问另一个函数作用域中变量的函数. ----- JavaScript 高级程序设计 闭包其实可以理解为是一个函数 简单理 ...
- 前端面试回顾---javascript的面向对象
转:https://segmentfault.com/a/1190000011061136 前言 前一阵面试,过程中发现问到一些很基础的问题时候,自己并不能很流畅的回答出来.或者遇到一些基础知识的应用 ...
- web前端学习(二) javascript对象和原型继承
目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...
- 前端面试之Javascript
1,JS基本的数据类型和引用类型: (1)基本数据类型:number,string,null,undefined,symbol--栈: (2)引用数据类型:object,array,function- ...
- 前端面试整理——javascript算法和测试题
(1)算法: 1.斐波那契数列:1.1.2.3.5.8.13.21.输入n,输出数列中第n位数的值. 方案一: function fn(n){ var num1 = 1, num2= 1, num3 ...
- 前端面试之JavaScript中this的指向【待完善!】
JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...
- web前端面试第一次[javascript函数和方法的区别]
//函数 function f1(){ console.log("我是函数"); } //调用函数 f1(); //创建一个空对象 var obj = {} //把函数定义到对象里 ...
随机推荐
- 新的 css 子选择器
1. html 结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划
前言:最近在(被迫)使用ArcGIS Engine10.2(.NET平台)进行二次开发(桌面应用),因为想做一个最短路径查询的功能,而arcgis的网络分析又比较麻烦,于是想到了使用Postgis.但 ...
- bellman-ford 单源最短路问题 图解
核心思想:松弛操作 对于边(u,v),用dist(u)和(u,v)的和尝试更新dist(v): dist(v) = min(dist(v) , dist(u)+l(u,v) 注:dist(i)为源 ...
- Java-GUI编程之Swing组件
目录 为组件设置边框 使用JToolBar创建工具条 JColorChooser和JFileChooser JColorChooser JFileChooser JOptionPane 基本概述 四种 ...
- 绕过 Docker ,大规模杀死容器
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | Connor Brewster 译者 | Sambodhi 策划 | Tina 要让 ...
- vue - Vue组件化编程
今天是对vue组件化的一个理解,最主要的单文件组件,然后就可以脚手架的学习了,本来昨晚就该上传的,但是用的那个上传博客园的Python脚本不行了,换了一个新的. 组件化让我越来越感觉到框架的力量了 一 ...
- muduo项目介绍
在上一个集群聊天服务器项目中,我使用了muduo作为网络库,然后主要实现了业务逻辑等,所以为了深入网络库的代码和实现,我跟着一位老师的代码去实现了muduo库的基本原理和作用,当然只是实现了主体的代码 ...
- vmware 无法安装 win 10
因为默认是 UEFI,但我们并没有 UEFI 引导分区,所以需要改成 BIOS
- 859. Buddy Strings - LeetCode
Question 859. Buddy Strings Solution 题目大意: 两个字符串,其中一个字符串任意两个字符互换后与另一个字符串相等,只能互换一次 思路: diff 记录不同字符数 两 ...
- Spring Boot下Spring Batch入门实例
一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...