今天在写代码的时刻碰到一种代码,在处置惩罚function的参数arguments的时刻,毛病的把算作一个Array处置惩罚了,尝试着去挪用Array对应的原型对象的slice属性,结果报undifined毛病,可见arguments并不是Array的孩子。怀着这个疑问,查看了arguments的constructor,发明arguments的constructor竟然是Object.
那末假如我们需要对arguments举行slice,处理体式格局有许多,道理都是讲arguments转化成数组就处理了,然则问题是,如许的形貌,用什么样的代码写最为幽美。挑选call()要领是比较适宜的,call(obj,[要领参数])要领使用来形貌用别的对象来替换当前对象且挪用对应的要领,比方,
emptyArray = [], slice = emptyArray.slice
alert(arguments.constructor)
alert(slice.call(arguments,1));//slice是emptyArray对象的,这里相当于把emptyArray替换成arguments来挪用slice。
遍历出数组中的一切元素,并对元素举行处置惩罚
var args = [1,2,3];
args.forEach(function(arg){alert(arg)})
|| 和 &&
alert(1||2)//1
alert(""||2)//2
/*
左侧||右侧 ,示意不是选左侧就是选右侧,左侧没有(false),那末留下来的就是右侧,假如左侧有了(true)留下来的就是左侧。[选了右侧,就把||之前的一同擦掉,选了左侧就把右侧擦掉]
*/
alert(1&&2);//2
alert(""&&2);//""
/*
与||恰好相反
*/