javascipt难点(javascipt常见问题)
导语:Javascript中几个容易做错的题,一起来做一做吧
前言
Javascript作为前端开发必须掌握的一门语言,因为语言的灵活性,有些知识点看起来简单,在真正遇到的时候,却不一定会直接做出来,今天我们就一起来看看几道题目吧。
Javascript
题目1
首先,我们来看一道稍微简单的题目,题目代码如下。
题目1
这道题考察的知识点是运算符的优先级。
首先,小括号()的优先级是最高的,所以首先会做判断,val与smtg相等返回true。因此最后这道题等价于判断是执行下面的语句1还是语句2。
判断
根据运算符的优先级我们知道,连接运算符+的优先级要高于条件运算符?的优先级,因此实际执行的是语句2,所以最终结果返回'Something'。
题目2
我们再来看看下面这道题。
题目2
这道题考擦的是数组的初始化和filter方法。
第一眼看上去,很多人会以为结果会输出[undefined, undefined, undefined],但是实际输出确是undefined,为什么会这样呢?
这是因为在Javascript里存在稀疏数组的概念,数组在初始化时,只会对已经确定索引的选项进行初始化,对于不存在索引的选项不进行初始化,通过以下代码可以确定。
判断
对数组使用in运算符时,是通过枚举数组的索引,通过3和4返回false可以知道,ary[3]和ary[4]实际是不存在的,未进行初始化。
接下来我们再看看Array.prototype.filter方法的polyfill,注意代码中标注的地方。
filter源代码
在filter方法的源代码中,我们发现使用了in运算符,而ary数组没有对索引为3,4,5的值进行初始化,因此会直接跳过执行,所以结果最终返回undefined。
题目3
直接通过代码来看题目吧。
题目3
乍一看,很多人会以为答案输出'Case A',但是实际结果输出为'Do not know'。这是为什么呢?
这道题考察的知识点是:switch和string。我们需要知道以下两点:
Javascript中switch执行的是严格相等(===)。
字符串和String的实例不一样。
关于第2点我们可以测试一下。
测试代码
因此针对题目中的'A'与new String('A')并不严格相等,最终会返回''Do not know'。
题目4
针对上面的题目3,我们稍作一点改动,成为下面的题目4,再看看结果输出什么?
题目4
题目4相对于题目3,只是在最后调用的时候传入的参数是String('A'),它的结果就变成了'Case A'。这是为什么呢?
其实很简单,String(X)返回的是一个字符串而不会生成一个新的String实例,因此与'A'是严格相等的。
总结
看了上面的几道题目,是不是觉得Javascript确实有很多神奇之处,如果认真看完了能一下子全做对的话,说明基础还是不错的,后续还会总结出更多Javascript中的容易做错的题目。
本文内容由小滢整理编辑!