表达式求值强化练习 参考答案

课后整理 2020-12-14

x=1、y=4、z=4

解析:JavaScript在预编译期会使用function add(n){ return n = n + 3;}覆盖掉前面声明的add方法。

100、undefined、101

解析:本题重点考察变量作用域,以及函数调用返回值问题,函数nAdd()没有声明返回值,则默认返回值为undefined。

undefined、报错

解析:使用var声明变量,但未对其赋值进行初始化时,这个变量的默认值为undefined,而变量b未声明先使用将报错。注意,未声明和未赋值是不同的概念。

4. true、true、false、true、true、false、true、true

解析:本例各个特殊值比较说明如下。

所以,对于0、空字符串的判断,建议使用“===”。“===”会先判断两边的值类型,类型不匹配时为false。

值为111,类型为Number

解析:先转换为字符串相连接,然后再转换为数字相减。

2

解析:考察引用数据类型应用技巧。

undefined 和 2

解析:上面代码相当于下面代码。

var foo = 1;
function(){
    var foo;
    console.log(foo); //undefined
    foo = 2;
    console.log(foo); // 2;   
}

函数声明和变量声明会被JavaScript引擎隐式提升到当前作用域的顶部,但是只提升名称不会提升赋值操作。

function a() {}、2

解析:var和function会提前声明,且function优先于var声明。所以提前声明后输出的a为function,然后代码往下执行,a被重新赋值,所以第二次输出为2。

10、报错、30

解析:function(){}内声明的变量是局部变量,而没有使用var声明的变量是全局变量。while{}、if{}、for(){}之内声明的变量都是全局变量,除非其被包含在function内。

10

解析:function和var会提前声明,而{...}内的变量也会提前声明。代码还没执行前,a变量已经被声明,于是'a' in window返回true,a被赋值。

NaN、'undefined 'hello'

解析:给基本类型数据加属性不报错,但是引用的话返回undefined,10+undefined返回NaN,而Undefined和String相加时转变成了字符串。

function

解析:因为函数声明优于变量声明。在代码逐行执行前,函数声明和变量声明会提前进行,而函数声明又会优于变量声明,这里的优于可以理解为晚于变量声明后,如果函数名和变量名相同,函数声明就能覆盖变量声明。所以以上代码将函数声明和变量声明调换顺序还是一样结果。

true、true、false

解析:unedfined和false都是特殊数据类型,但是用双引号引起了就不是本身类型了,而是字符串,空串相当于false,否则是true。