读js语言精粹收获
1.js可以根据选择跳出多层循环【在循环前加个标签】
label:for(var i=0;i<2;i++){ for(var j=0;j<10;j++){ console.log(i,j); if(j==3){ break label; } } }
2.typeof运算符产生的值只有'number','undefined','string','boolean'【es5的基础数据类型少了一个null】+'function','object'
注:array和null结果都为'object'
需要依靠Object.prototype.toString.apply()
3.如果添加一个属性到一个原型对象中,以该原型创建的对象均可见
4.Number String的原型对象都是Function,因为它们都是单个函数实例,而Function是所有函数的原型对象。
5.如果新建新的方法去修改闭包内的数据,是行不通的,但是可以使用闭包内的方法去修改
var maker=function(){ var id=12312; return { setId:function(newid){ id=newid; } show:function(){ console.log(id); } } } var unit=maker(); unit.setId(1111); unit.show(); //1111 unit.setId2=function(newid){//新建函数去修改id id=newid; } unit.setId2(2222); unit.show();//1111
6.arguments压根不是数组 只是数据集合外加一个length属性,不可以使用数组所用的方法
所以要使用数组的方法需要使用apply和call方法,slice.apply(arguments);