常见JavaScript小题目

1.请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

Array.prototype.distinct=function(){
var ret=[];
for(var i=0;i<this.length;i++){
    for(var j=i+1;j<this.length;){
        if(this[i]===this[j]){
            ret.push(this.splice(j,1)[0]);
        }else{
            j++;
        }
    }
}
return ret;
}
//for test
alert(['a','b','c','d','b','a','e'].distinct());

2.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)

var arr = new Array();
var boxs = document.getElementsByTagName("input");
for(var index in boxs) {
    if(boxs[index].type == "checkbox"){
        arr.push(boxs[index]);
    }
}
return arr;

3.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?

box.onclick = function(){}
box.addEventListener("click",function(){},false);
function xxx(){}
<button onclick="xxx()"></button>

4.看下列代码,输出什么?解释原因

1 var a = null;
2 alert(typeof a); //object

所有对象的默认值都是null

5.看下列代码,输出什么?解释原因。

var foo = "11"+2-"1";
console.log(foo);
console.log(typeof foo);

javascript中加法操作符与减法操作符在字符串与数字相加时的区别

  • 对于加法操作符(+)的用法

如果操作数中含有字符串,那么就要应用如下规则:

1)如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;

2)如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
如果有一操作数为对象,数字或者布尔值,则调用它们的toString()方法取得相应的字符串的值,然后再应用前面关于字符串的规则。对于Undefined和null,则分别调用String()方法并取得字符串”undefined”和“null”。

  • 对于减法操作符(-)

如果操作符中含有字符串,那么就要应用如下规则:

如果有一个操作符是字符串,布尔值,null或者undefined,则先在后台调用Number()函数将其转换为数值,然后再执行数和数字之间的减法运算。如果转换的结果为NaN,那么得到的结果就是NaN。

tips:Number()函数的转换规则中:如果是null值,则返回0;如果是undefined,则返回NaN.

var foo = "11"+2;  
console.log(foo);//112  
console.log(typeof foo);//string  

var foo = "11"+2-"1";  
console.log(foo);//111  
console.log(typeof foo);//number 

所以,在上述例子中。“11”+2,执行的是将数字2转换成字符串再与“11”拼接,最后的结果为“112”,string类型;“112”-“1”,分别将“112”和“1”转换成数字,相减,结果为111,number类型。

6.看下列代码,输出什么?解释原因。

var foo = 1;
(function(){
    console.log(foo);
    foo = 2;
    console.log(foo);
})();
看下面示例:
var foo=1;
function bar() {
    //javascript没有块级作用域, 在一个函数内任何地方声明的var都会被提到函数的最开头
    //相当于这里有一个 var foo;
    console.log(foo); //undefined, 因为函数内的var foo把外头的给覆盖了
    if (!foo) {
        var foo = 10; //相当于foo = 10; var foo的声明被提到最前
    }
    console.log(foo);
} 
bar();

7.写一个function,清除字符串前后的空格。(兼容所有浏览器)

String.prototype.trim = function(){
    return this.replace(/^\s+/,"").replace(/\s+$/,"");
}

8.请问p.name是多少?

1 :

var fun = function(){
    this.name = 'peter';
        return {
            name: 'jack'
        };
    }
var p = new fun();

2:

var fun = function(){
    this.name = 'peter';
        return 'jack';
    }
var p = new fun();

1.jack
2.undefined