最新文章:
- 处理Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.警告
- 什么是原子化CSS
- 一些关键的SEO优化建议和操作步骤
- 如何优化Vue3应用的性能
- Vue3中watch 和 watchEffect有什么区别
前端面试题(五)
发布时间:2018年03月16日 评论数:抢沙发阅读数: 5561
下面运行结果是什么?
var a = [1, 2, 3], b = [1, 2, 3], c = [1, 2, 4]; console.log(a == b); console.log(a === b); console.log(a > c); console.log(a < c);
运行结果为:false false false true
对于console.log(a=b);因为a和b都是数组,是object类型,object类型在进行=比较的时候,比较的对象的引用地址是否相同,很明显,a和b不是同一个对象,所以引用地址不同,故返回false;
对于console.log(a===b);===运算符要求两边值和数据类型都要相同,a和b的数据类型都是object/Array,但是由于上面的分析可知,a和b的值并不相同,所以也是返回false.
对于console.log(a>c);数组进行>或者<运算比较的时候,首先要调用valueOf()方法进行转换成基本类型的值,因为valueOf()方法返回的仍然是数组,所以要继续调用toString()方法进行转换,返回值为数组元素用逗号连接的字符串,是基本类型的值可以用于比较,所以console.log(a>c)等价于console.log(a.toString()>c.toString())等价于console.log("1,2,3">"1,2,4")相当于是两个字符串在比较大小,而字符串比较大小的时候,是字符串从左到右依次转换成ASII码进行比较,前面1,2,相同所以实际上是比较3和4的ASII码值的大小,很明显3的ASII码比4的ASII码小,所以返回false.
对于console.log(a<c)
同3分析,故返回true.
下面运行结果是什么?
var two = 0.2; var one = 0.1; var eight = 0.8; var six = 0.6; [two - one == one, eight - six == two]
运行结果为: [true,false]
几乎所有语言在进行浮点数四则运算时都会出现精度误差的问题(只不过想java等这些语言已经处理过了,所以误差不那么明显)这是因为计算机的运算是二进制的,很多小数在转换成二进制是无限循环的,但计算机不支持无限循环,所以得根据支持的精度进行舍入处理。
0.2二进制为0.00110011...001101
0.1二进制为0.000110011...001101
0.2的二进制相对于0.1的二进制做了1位的移位所以
0.2 - 0.1 == 0.1//true
0.8 - 0.6 == 0.2//false
下面运行结果是什么?
var a = '8' + 2; var b = '8' - 2;
运行结果为82 6。
字符串和任何类型相加,都会变成字符串拼接,运算时自动先把其他类型转换成字符串类型。
任何类型和Number类型做减法,先把其他类型转换成Number类型,转不了的则为NaN。
下面运行结果是什么?
(function(){ var x = y = 1; })(); console.log(y); console.log(x);
运行结果为:1 error
这个题目是变量提升和连等赋值问题,首先连等操作符是从右向左赋值的,y = 1; var x = y; 变量x是用var进行声明并赋值的所以是局部变量, 变量y是未用var声明的变量在javscritp中是一个隐式全局变量。所以在外面consoloe.log(y) 是1, console.log(x) 报错 x is no defined.
本文地址: https://arbays.com/post-78.html  本文已被百度收录!
版权声明:若无注明,本文皆为“富录-前端开发|web技术博客”原创,转载请保留文章出处。