{} 单单出现一对大括号时表示代码块
{
var a = 2;
console.log(a);
}
当大括号被赋值给一个变量时,表示对象的字面量
var obj = {this.a=5};
当大括号外用小括号包裹时,也表示对象
({}).toString.call(new Array); //等价于 Object.prototype.toString.call(new Array);
Function.toString() // 返回 function Function(){ [native code] } native code 是指内部代码,不能看
Array.toString() // 返回 function Function(){ [native code] }
以此类推,RegExp,Number,Boolea等都是返回这个
如果是自己定义的函数,则不会显示native code 而是将整个函数显示出来
function my(){
console.log('自定义');
}
console.log(my.toString()); //返回 function my(){console.log('自定义')}
ps var a = new Array(); a.toString(); // 因为数组里没东西,所以返回的是一个空字符串
window对象有一个window属性指向自己,也就是 window.window === window //为真
伪数组的特点
1.必须要有length属性
2.如果length属性的值为0,那么这个对象没有任何元素(当然没有元素也可以是伪数组,比如arguments)
3.如果length属性值不为0,那么这个对象一定有(length-1)为下标的属性
举例说明,怎么判断是否是伪数组
var a = {length:2,0:"xx",1:"xx"}; // 这是伪数组,length值为2,有2-1=1,有下标为1的值“xx”。
var b = {length:7,0:"xx",1:"xx",2:"xx"} //不是伪数组,length值为7,没有下标为6的值。
IE8中需要先把自定义伪数组转为真数组,才能借用apply
//在IE8中
var o = [];
var obj = {name:'su',age:23};
[].push.apply(o,obj); //会报错,在ie8中,apply要真数组或内置数组才能起作用。
//将obj转为真数组
[].push.apply(o,[].slece.call(obj)); //slice方法对数组进行截取,然后返回一个新的数组。
null == undefined //返回true
函数在不同情境下的不同称呼
1.普通函数
var say = function(){...} //函数声明,不会被提升
function tell(){...} //函数定义,会被提升
2.方法,如果一个函数有了宿主,那么这个函数就叫做这个宿主的方法。
var s = {
fn : function(){...};
};
3.构造函数,如果一个函数被通过new的方式创建了对象,那么这个函数就叫做构造函数。
4.回调函数,如果一个函数被当作参数传给另外一个函数,那么这个函数就叫做回调函数
原型链图示
在IE8中获取元素css样式使用 元素.currentStyle.height
高级浏览器中获取css样式使用 getComputedStyle(div).height
input.getAttribute('value'); //获取输入框中的初始值,当input.value='新值';时,获取的仍为初始值,不会更新
input.value; //获取input的value值
在IE8中,不支持indexOf,是指不支持数组的indexOf,字符串的indexOf是支持的
var arr = [3,4,5]; arr.indexOf(3);//报错 var str = "1234"; str.indexOf(3);//可以正常返回 str.indexOf('3')效果等同。
String.trim和String.prototype.trim是不一样的。String.trim是把String当对象,trim是一个静态属性。另一个是原形链上的trim。字符串.trim(); 调用的是原形链上的trim。两者别搞混。