js数据类型分为:基本类型:数字、字符串、布尔值、undefined和null
非基本类型(即对象)(或引用类型):数组,对象等
一、变量属性
var a=[];
a[0]=1;
a['foobar']=2;
console.log(a.length);//1
console.log(a.foobar);//2
当一个变量被声明后。扩充其属性并不改变原数据类型
二、命名提升
foo();
var foo=0;
function foo(){
console.log(1);
}
foo=function(){
console.log(2);
};
声明的变量和命名函数都会被提升到代码的最前面,只不过声明的变量的赋值语句在代码中的位置不变。所以上面代码应该被理解为:
var foo;
function foo(){
console.log(1);
}
foo();
foo=0;
foo=function(){
console.log(2);
};
输出结果:1
三、作用域
foo();
var a=true;
if(a){
function foo(){
console.log('a');
}
}else{
function(){
consoloe.log('b');
}
}
javascript并不是以代码段为作用域,而是以函数。再根据命名提升原则,所以代码改写为:
function foo(){
console.log('a');
}
function foo(){
console.log('b');
}
foo();
var a=true;
if(a){
}else{
}
结果:b