1.
分析:javascript中的六种数据类型:object(function,array,null),string,number,boolean,undefined,function。
var f = (
function f (){
return "1";
},
function g (){
return 1;
}
)()
console.log(typeof(f));
分析:这道题涉及到的知识点是立即执行函数,(1,2)返回的值,typeof的使用。
因为是(1,2)所以返回的是g函数,之后立即执行,f 的值就是1,那么在typeof进行判断的时候,返回的就是number。
var x = 11;
if(function f(){}){
x += typeof f;
}
console.log('x的值是'+ x);
分析:if后面的括号将function f 扎转化为了一个表达式,这个表达式的值肯定不是false类型,所以该函数执行,执行后面的表达式,typeof f ,因为function f 被当做了一个表达式进行执行,所以在执行后就消失,无法再找到,而typeof一个未经声明的变量的值是undefined,所以,最后输出的结果是11undefined。
小知识点总结
分析:undefined == null undefined><=0全都不成立,null也是一样,全部都不成立,所以他们等于。但是在三等于的面前他们不等于,因为三等于是绝对等于,必须长得一模一样,但是NaN是一个特例,他不等于自己。
// 判断一个数是不是NaN,自己进行构造函数
function myIsNaN (num){
var ret = Number(num);
ret += ""; //非常巧妙地设计,因为NaN不等于任何数,
//直接进行永远都是false,将其转化为字符串进行操作
if(ret == "NaN"){
return true;
}else{
return false;
}
}
// 测试
console.log(myIsNaN(123));
console.log(myIsNaN('fbgauigk'));
注意:引用数据类型比较的都是地址。
分析:这道题目考查的是预编译。第一个foo未定义,打印出来的是undefined,第二个foo为2,第三个会报错,打印sytaxerrer,hello is not defined.
深度拷贝