最基本的JavaScript面试题(16个)

来源:http://www.chinese-glasses.com 作者:Web前端 人气:176 发布时间:2020-04-22
摘要:时间: 2019-09-20阅读: 157标签: 面试 1.使用 typeof bar === "object" 来确定 bar是否是对象的潜在陷阱是什么?如何避免这个陷阱? 在 JS面试中,经常会看到一些简单而又沙雕的题目,这些题目包

时间: 2019-09-20阅读: 157标签: 面试

1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱?

在 JS 面试中,经常会看到一些简单而又沙雕的题目,这些题目包含一些陷阱,但这些在我们规范的编码下或者业务中基本不会出现。 有些面试官就是这样,不专注于制定代码的标准和规范上,却用不规范的代码去检验别人是否细心。

陷阱:

这魔幻的世界就是一个攀比优越感的,我能考你,我就是比你优越,真实。

typeof null === "object" //true

来看看这 7 个沙雕题目是哪些。

避免:

  1. 偶然创建的全局变量

console.log((bar !== null) && (typeof bar === "object"));  // false

面试官问

2.下面的代码将输出什么到控制台,为什么?

在下面的代码中typeof a和typeof b结果各自是什么?(沙雕)

(function(){

var a=b=3;

})();

console.log("a defined? "+(typeof a!=='undefined'));

console.log("b defined? "+(typeof b!=='undefined'));

function foo() { let a = b = 0; a++; return a;}foo();typeof a; // = ???typeof b; // = ???

输出:

答案

a defined?false

b defined?true

这个代码的重点在第二行:let a = b = 0。这个语句声明了一个局部变量a,但是它也声明了一个全局变量b。

原因:

在foo()作用域或全局作用域中都没有声明变量b。因此 JS 引荐将b = 0表达式解释为window.b = 0。

var a = b = 3; 实际是以下声明的简写:

如下图所示,函数foo中的i都是一个偶然创建的全局变量:

b=3;

var a=b;

同样,在咱们的问题中,b是一个偶然创建的全局变量。在浏览器中,上面的代码相当于如下:

在闭包外访问内部变量,正常应该输出undefined。b不是undefined,是因为没有var声明,则b=3,默认定义的是全局变量。

function foo() { let a; window.b = 0; a = window.b; a++; return a;}foo();typeof a; // = 'undefined'typeof window.b; // = 'number'

3.封装JavaScript源文件的全部内容到一个函数块有什么意义及理由?

typeof a是'undefined'。变量a仅在foo()作用域中声明,在外部作用域内不可用。

创建一个私有的命名空间,避免不同JavaScript模块和库之间潜在的名称冲突。

typeof b结果是'number'。b是一个值为0的全局变量

4.在JavaScript源文件的开头包含 use strict 有什么意义和好处?

  1. 数组的 length 属性

意义:

面试官问

有利于那些被忽略或默默失败了的代码错误,产生或抛出异常。

clothes[0]的值是什么?(沙雕)

严格模式的主要优点:

const clothes = ['jacket', 't-shirt'];clothes.length = 0;clothes[0]; // = ???

(1)使调试更加容易。

答案

(2)防止意外的全局变量。

数组对象的length属性具有一些特殊的行为:

(3)消除 this 强制。如果没有严格模式,引用null或未定义的值到 this 值会自动强制到全局变量。在严格模式下,引用 null或未定义的 this 值会抛出错误。

减少length属性的值的副作用是删除自己的数组元素,这些元素的数组索引位于新旧长度值之间。

(4)不允许重复的属性名称或参数值。有利于bug的定位。

由于length属性行为,当 JS 执行clothes.length = 0时,删除所有的clothes项。 所以clothes[0]的值为undefined,因为clothes数组已被清空。

(5)使eval() 更安全。

3.考验眼力的魔幻题

(6)在 delete使用无效时抛出错误。

面试官问

5.考虑以下两个函数。它们会返回相同的东西吗? 为什么相同或为什么不相同?**

下面代码中 numbers 数组的内容是什么?注意for()后加了一个分号(;),真是沙雕

function foo1(){  

    return {     

            bar: "hello"  

    };

}

 function foo2(){ 

     return  

    {      

        bar: "hello" 

     };

}

const length = 4;const numbers = [];for (var i = 0; i  length; i++);{ numbers.push(i + 1);}numbers; // = ???

返回不同的东西。

答案

foo1(); //Object{bar:"hello"}

上面代码中for()后加了一个分号(;) ,加上分号,JS 会认为该语句结束,所以 for 循环执行了4次空语句,当退出循环的时候,此时的 i 值为 4。

foo2(); //undefined 

然后执行{ numbers.push(i + 1); },所以最终numbers内容只有一个数字5。

原因:

上面的代码相当于下面的代码

foo2的return语句后面空白,默认会被添加一个分号。导致运行后返回undefined。

const length = 4;const numbers = [];var i;for (i = 0; i  length; i++) { // does nothing}{ // a simple block numbers.push(i + 1);}numbers; // = [5] 

6.NaN 是什么?它的类型是什么?你如何可靠地测试一个值是否等于 NaN ?

用不规范的代码去检验别人是否细心,我觉得很沙雕。

NaN:not a number

4.自动分号插入

类型:number。typeof NaN,返回number

面试官问

可靠地测试:

arrayFromValue()返回什么值?(沙雕)

10bet,由于NaN !== NaN,可使用value !== value测试。

function arrayFromValue(item) { return [items];}arrayFromValue(10); // = ???

内置函数(全局函数)isNaN(),或ES6新增的Number.isNaN() 函数。注:后者更可靠。

答案

7.讨论写函数 isInteger(x) 的可能方法,用于确定x是否是整数。

这里需要注意的return和[items]之间已经换行了,JS 会在换行之间自动插入分号。所以上面等价下面的代码:

es6提供Number.isInteger() 函数。

function arrayFromValue(item) { return; [items];}arrayFromValue(10); // = undefined

es5时代,自行实现:

return;在函数内部使该函数返回undefined,所以arrayFromValue(10)的值为undefined。

function isInteger(x) {

    return (x^0) === x; //或 return Math.round(x) === x;

}

  1. 被考烂的一个经典闭包问题

面试官问

function isInteger(x) {

    return (typeof x === 'number') && (x % 1 === 0);

}

下面的代码执行结果是什么?(能不能换个题)

**8.写一个简单的函数(少于80个字符),要求返回一个布尔值指明字符串是否为回文结构。
**

let i;for (i = 0; i  3; i++) { const log = () = { console.log(i); } setTimeout(log, 100);}

function isPalindrome(str) {    

    str = str.replace(/W/g, '').toLowerCase();   

    return (str == str.split('').reverse().join(''));

}

答案

9.请看下面的代码片段:

本文由10bet发布于Web前端,转载请注明出处:最基本的JavaScript面试题(16个)

关键词:

最火资讯