当我们使用 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