1.看下列代码输出为何?解释原因
var a; alert(typeof a);//undefined alert(b);//报错
解释:undefined是一个只有一个值的数据类型,这个值就是"undefined",在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined,而b由于未声明将报错。
注意未声明的变量和声明了未赋值的是不一样的。
var a = null; alert(typeof a);//object
解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回"object"
var undefined; undefined == null;//true undefined与null相等,但不恒等(===)
1 == true;//true 一个是number一个是string时,会尝试将string转换为number
2 == true;//false 尝试将boolean转换为number,0或1
0 == false;//true
0 == '';//true
NaN == NaN;//false
[] == false;//true 尝试将object转换成number或string,取决于另外一个对比量的类型
[] == '';//true
[] == [];//false
[] == ![];//true
解释: 隐式转换的时候,[]为false。
[]是对象,用于判断条件就会转成true,但是将[]与布尔值比较却是false,[]==false
var foo = "11"+2-"1"; console.log(foo);//111 console.log(typeof foo);//number
var a = new Object(); a.value = 1; b = a; b.value = 2; alert(a.value);//2(考察引用数据类型细节)
var x = 1; function ScopeTest() { alert(x); var x = 'hello world'; alert(x); } ScopeTest();//先弹出undefined,再弹出hello world
var x=3; (function(){ x=6; y=6; var z=3; })(); console.log(x==y);//true console.log(z);//报错,z is not defined.
var a=false; var b=6; var c=true; var d=false; var e=6; console.log(a||b||c);//6 console.log(d&&e);//false
var a = 1; function func(){ a=b=2 } func() console.info(a)//2 console.info(b)//2
var t = true; window.setTimeout(function(){ t=false; },1000); while(t){ } alert('end');
console.log(isNaN(NaN));//true console.log(isNaN(23));//false console.log(isNaN('ds'));//true console.log(isNaN('3213sdasd'));//true console.log(NaN === NaN);//false console.log(NaN === undefined);//false console.log(undefined === undefined);//true console.log(typeof NaN);//number
Number(undefined)//NaN
Number(null)//0
parseInt(true)//NaN
parseInt(null)//NaN
parseInt(false)//NaN
if(10>9>8 == true){ console.log("html5"); } else { console.log("css3"); } //css3
var obj = {}; obj.name = "first"; var peo = obj; peo.name = "second"; console.log(obj.name);//second
var output = (function(x){ delete x; return x; })(0); console.log(output);//0