20个必会的JavaScript面试题(小结)(2)

当我们使用 delete 操作符删除一个数组中的元素,这个元素的位置就会变成一个占位符。打印出来就是undefined x 1。 注意如果我们使用trees[3] === 'undefined × 1'返回的是 false。因为它仅仅是一种打印表示,并不是值变为undefined x 1。

问题13:下面代码输出什么?

var trees = ["xyz","xxxx","test","ryan","apple"]; delete trees[3]; console.log(trees.length);

输出是5。因为delete操作符并不是影响数组的长度。

问题14:下面代码输出什么?

var bar = true; console.log(bar + 0); console.log(bar + "xyz"); console.log(bar + true); console.log(bar + false);

输出是

1
truexyz
2
1

下面给出一个加法操作表

Number + Number -> 加法

Boolean + Number -> 加法

Boolean + Boolean -> 加法

Number + String -> 连接

String + Boolean -> 连接

String + String -> 连接

问题15:下面代码输出什么?

var z = 1, y = z = typeof y; console.log(y);

输出是 undefined。js中赋值操作结合律是右至左的 ,即从最右边开始计算值赋值给左边的变量。

上面代码等价于

var z = 1 z = typeof y; var y = z; console.log(y);

问题16:下面代码输出什么?

var foo = function bar(){ return 12; }; typeof bar();

输出是抛出异常,bar is not defined。 如果想让代码正常运行,需要这样修改代码:

var bar = function(){ return 12; }; typeof bar();

或者是

function bar(){ return 12; }; typeof bar();

明确说明这个下问题

var foo = function bar(){ // foo is visible here // bar is visible here console.log(typeof bar()); // Work here :) }; // foo is visible here // bar is undefined here

问题17:两种函数声明有什么区别?

var foo = function(){ // Some code }; function bar(){ // Some code };

foo的定义是在运行时。想系统说明这个问题,我们要引入变量提升的这一概念。

我们可以运行下如下代码看看结果。

console.log(foo) console.log(bar) var foo = function(){ // Some code }; function bar(){ // Some code };

输出为

undefined function bar(){ // Some code };

为什么那?为什么 foo 打印出来是 undefined,而 bar打印出来却是函数?

JavaScript在执行时,会将变量提升。

所以上面代码JavaScript 引擎在实际执行时按这个顺序执行。

// foo bar的定义位置被提升 function bar(){ // Some code }; var foo; console.log(foo) console.log(bar) foo = function(){ // Some code };

原代码的输出合理解释了。

问题18:下面代码输出什么?

var salary = "1000$"; (function () { console.log("Original salary was " + salary); var salary = "5000$"; console.log("My New Salary " + salary); })();

输出是

Original salary was undefined
My New Salary 5000$

这题同样考察的是变量提升。等价于以下代码

var salary = "1000$"; (function () { var salary ; console.log("Original salary was " + salary); salary = "5000$"; console.log("My New Salary " + salary); })();

问题19:什么是 instanceof 操作符?下面代码输出什么?

function foo(){ return foo; } console.log(new foo() instanceof foo);

instanceof操作符用来判断是否当前对象是特定类的对象。

function Animal(){ //或者不写return语句 return this; } var dog = new Animal(); dog instanceof Animal // Output : true

但是,这里的foo定义为

function foo(){ return foo; }

所以

// here bar is pointer to function foo(){return foo}. var bar = new foo();

所以 new foo() instanceof foo 返回 false

问题20: 如果我们使用JavaScript的"关联数组",我们怎么计算"关联数组"的长度?

var counterArray = { A : 3, B : 4 }; counterArray["C"] = 1;

其实答案很简单,直接计算key的数量就可以了。

Object.keys(counterArray).length // Output 3

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3012abbbd8ba8dce79f4f2a178c82bb5.html