第 1 题
var x = 10;
function fn() {
console.log(x);
}
function show(f) {
var x = 20;
f();
}
show(fn);
//输出
10
解析:JavaScript 才有的是词法作用域,它规定了函数内访问变量时,是从函数声明的位置向外层作用域去查找,而不是从调用的位置开始向上查找。
第 2 题
Object.prototype.bar = 1;
var foo = {
goo: undefined
};
console.log(foo.bar);
console.log('bar' in foo);
console.log(foo.hasOwnProperty('bar'));
console.log(foo.hasOwnProperty('goo'));
//输出
1
true
false
true
解析:in操作符:检测指定对象(右边)原型链上是否有对应的属性值。
hasOwnProperty方法:检测指定对象自身上是否有对应的属性值。两者的区别在于in会查找原型链,而hasOwnProperty不会。
示例中对象foo自身上存在goo属性, 而它的原型链上存在bar属性。
通过这个例子要注意如果要判断foo上是否有属性goo,不能简单的通过if(foo.goo){}判断,因为goo的值可能为undefined或者其他可能隐式转换为false的值。
第3 题
Object.prototype.bar = 1;
var foo = {
moo: 2
};
for (var i in foo) {
console.log(i);
}
//输出
'moo'
'bar'
解析:for…in…遍历对象上除了Symbol以外的可枚举属性,包括原型链上的属性
第 4 题
function foo1() {
return {
bar: "hello"
};
}
function foo2() {
return
{
bar: "hello"
};
}
console.log(foo1());
console.log(foo2());
// 输出
{ bar: "hello" }
undefined
解析: 两个函数唯一区别就是return后面跟的值,一个换行一个不换行。
当我们书写代码时忘记在结尾书写;时,JavaScript解析器会根据一定规则自动补上;。
function foo2() {
return
{
bar: "hello"
};
}
//会被解析成
function foo2() {
return;
{
bar: "hello"
};
}
因此函数执行后会返回undefined。
第 5 题
console.log(
(function() {
return typeof arguments;
})()
);
// 输出
'object'
解析:arguments 是一个对应于传递给函数的参数的类数组对象。 类型为object。因此typeof arguments = ‘object’。
第 6 题
console.log(Boolean(false));
console.log(Boolean('0'));
console.log(Boolean(''));
console.log(Boolean(NaN));
//输出
// false
// true
// false
// false
解析: 只有下面几种值在转换为布尔值时为false:
+0, -0, NaN, false, undefined, null, ''
除此之外的值在转换为布尔值的时候全部为true。
第 7 题
console.log(Array(3));
console.log(Array(2, 3));
// 输出
[empty × 3]
[2,3]
解析: 使用Array()创建数组时,要注意传入的值的类型和数量。
第 8 题
var a = [1, 2, 3];
console.log(a.join());
var b = [1, 2, 3];
console.log(b.join(','));
var c = [1, 2, 3];
console.log(c.join('|'));
//输出
1,2,3
1,2,3
1|2|3
解析: join方法如果省略参数,默认以,分隔。
第 9 题
console.log(0.1 + 0.2 == 0.3);
//输出
false
解析:浮点数运算
第 10 题
var a = [3];
var b = [1];
console.log(a - b);
//输出
2
解析: 当执行 - 运算符的时候,被减数,减数都要是number类型,所以会进行转换
[3].toSting() => '3' => Number('3') => 3, [2]同理
\