The Quiz(http://dmitrysoshnikov.com/ecmascript/the-quiz/#q9)

本文深入探讨了JavaScript中的类型检查、属性访问、函数行为、运算符应用、作用域及闭包等关键概念,通过具体代码示例展示了如何在实际编程中灵活运用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. What’s the result of: //string


typeof typeof(null)

 

================Q1 Answer===============

typeof 是操作符,会返回一个字符串结果表示操作数的类型。typeof(null)返回 "object”,所以 typeof "object"的结果是string


2. Are the algorithms of the following checks completely equvalent?  //Yes


typeof foo == 'undefined'

and

typeof foo === 'undefined'

 

==========Q2 Answer======================

无论使用==或者===,typeof都会返回字符串"boolean"

 


3. What’s the result of: // 1


100['toString']['length'] 

 

===========Q3 Answer=====================

我们知道java中有boxing和unboxing的概念,同样,js中也有这种概念。所以上面的100['toString']['length'] 等价于new Number(100)['toString']['length'] 。所以这里的意思是求Number示例的toString方法的参数个数。 我们还知道对于数字类型的toString方法是可以传入一个数字,返回N进制的数字。例如100.toString(2)的意思是返回100的2进制数据格式。 所以toString方法是有一个形式参数的。所以调用toString函数的length属性为1。

 

4. What’s the result of: //8


var a = (1,5 - 1) * 2  

 

=================Q4 Answer==============

括号内是分组运算,返回最后一组的结果,就是5-1,然后乘以2,等于8

 

5. What’s the result of:  //20,20,10,10


var x = 10;

var foo = {  

 x: 20,  

bar: function () {     var x = 30;     return this.x;   }

};  

 console.log(  

 foo.bar(),  

(foo.bar)(),  

(foo.bar = foo.bar)(),  

 (foo.bar, foo.bar)()

 ); 

 

=====================Q5 Answer==============

这个解释起来真费劲,自己看规范去吧。。。。。

 

6. What’s the result of:  //undefined, undefined

function f(x, y) {  

 x = 10;  

 console.log(     arguments[0],     arguments[1]   );

}  

 f();   

 

=============Q6 Answer============

在不传入参数时,arguments不会和形参x,y关联。所以无论怎么修改x,arguments的length一直是0,所以arguments[0],     arguments[1]都是undefined

7. What’s the result of:   //20


var  b = 10,   c = (     20,     function (x) { return x + 100},     function () { return arguments[0]}   );  

a = b + c

({x: 10}).x

 

=============Q7 Answer============

注意这里不要被换行迷惑,这里实际是在求 a = b + c ({x: 10}).x  表达式里的a值。c是函数function () { return arguments[0]}  所以,这个表达式等价于:

a = 10 +{x:10}.x 。 所以结果是20

 

 

8. What’s the result of:  //undefined


1..z

 

=============Q8 Answer============

首先参考Q3的boxing和unboxing概念,这里等价于new Number(1.).z 。

Number的原型上没有z属性,所以是undefined。这里为什么要用两个点,是因为一个点会被解析成小数点。不会解析成取属性操作符

 

9. What’s the result of:  //undefined, 30, 20


({   x: 10,   foo: function () {    

   function bar() {      

     console.log(x);      

     console.log(y);      

     console.log(this.x);    

    }    

    with (this) {      

        var x = 20;      

        var y = 30;      

         bar.call(this);    

     }  

  }

 }).foo();

10. What’s the result of:  //ReferenceError or possibly no error


foreach (k in {a: 10, b: 20}) {   // ... }

=============Q10 Answer============

这里如果foreach是个函数,并且k被定义,就不会有错。否则会报

ReferenceError: k is not defined

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值