1.下列代码输出的值
console.log(100['toString']['length']); // 1
console.log(100['toString']) // 输出为函数,因为toString是方法,没有小括号就是没有调用,所以返回的是函数本身
解释:函数本身上的length属性是函数的形参个数,toString方法有默认参数,表示的进制,所以length为1,所以结果是1
参考链接:http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.2
2.代码输出为
var x=1;
function fn(n){n=n+1}
y=fn(x);
console.log(y); // 输出为undefined
解释:函数没有返回值所以输出为undefined
3.代码输出为
function fn1(){
var a=0;
function fn2(){
++a;
alert(a);
}
return fn2;
}
fn1()(); // 弹出1
var newFn=new fn1();
newFn(); // 弹出1
newFn(); // 弹出2
解释:第一次属于调用函数,++a先执行++操作在赋值给a,所以弹出1,而后新创造了一个函数newFn第一次弹出和正常引用一样,所以弹出1,2而第二次调用的时候,由于闭包的作用,里面a没被释放,在1的基础上又加上了1,所以弹出2
4.代码输出为
var arr=[1,2];
var arr2=arr.concat();
arr2.push(arr.splice(1,0));
console.log(arr); // [1,2]
console.log(arr2); // [1,2,[]]
知识点1:contact方法不传参数
var arr = [1, 2];
var arr2 = arr.concat();
console.log(arr); // 输出为[1,2]
console.log(arr2); // 输出为[1,2]
小结:不传参数,会重新创建一个一样的数组,不改变原数组
知识点2:contact方法,传一个一纬数组
var arr = [1, 2];
var arr2 = arr.concat([3,4]);
console.log(arr); // 输出为[1,2]
console.log(arr2); // 输出为[1,2,3,4]
小结:传一个一纬数组,会重新创建新数组,传入数组会被拉平,不改变原数组
知识点2:contact方法,传一个二纬数组
var arr = [1, 2];
var arr2 = arr.concat([3,4,[5,6]]);
console.log(arr); // 输出为[1,2]
console.log(arr2); // 输出为[1,2,3,4,[5,6]]
小结:传二纬数组,会重新创建新数组,传入数组的最外层元素会被拉平,里面的不变,不改变原数组
知识点3:contact方法,传一个对象
var arr = [1, 2];
var arr2 = arr.concat({name:'bonly'});
console.log(arr); // 输出为[1,2]
console.log(arr2); // 输出为[1,2,{name:'bonly'}]
小结:传对象,会重新创建新数组,传入对象直接和数组拼接成新数组,不改变原数组
知识点4:splice方法
var arr = [1, 2];
console.log(arr); // 输出[1,2]
console.log(arr.splice()); // 输出为[]
arr.splice();
console.log(arr); // 输出[1,2]
小结:不传参数表示不对数组做任何操作,但是又返回值,返回被切割的空数组
知识点5:splice方法,用于删除数组的元素
var arr = [1, 2];
console.log(arr); // 输出[1,2]
console.log(arr.splice(1)); // 输出为[2]
arr.splice(1);
console.log(arr); // 输出[1]
小结:传一个参数表示从这个位置开始切割(包括这个 位置),返回被切割的数组,原数组改变
知识点5:splice方法,用于删除数组的元素
var arr = [1, 2];
console.log(arr); // 输出[1,2]
console.log(arr.splice(1)); // 输出为[2]
arr.splice(1);
console.log(arr); // 输出[1]
小结:传一个参数表示从这个位置开始切割(包括这个 位置),返回被切割的数组,原数组改变
知识点6:splice方法,用于删除数组的元素
var arr = [1, 2,3];
console.log(arr.splice(1,1)); // 输出[2]
console.log(arr); // 输出[1,3]
小结:传两个参数表示从第一个位置开始切割(包括这个 位置),第二个参数表示切割的个数,返回被切割的数组,原数组改变
知识点7:splice方法,用于替换数组的元素
var arr = [1, 2,3];
console.log(arr.splice(1,1,4,5)); // 输出[2]
console.log(arr); // 输出[1,4,5,3]
小结:传两个参数表示从第一个位置开始切割(包括这个 位置),第二个参数表示切割的个数,之后的参数表示在切割位置上放上开始新的元素,返回被切割的数组,原数组改变
知识点8:splice方法,用于增加数组的元素
var arr = [1, 2,3];
console.log(arr.splice(1,0,4,5)); // 输出[]
console.log(arr); // 输出[1,4,5,2,3]
小结:传两个参数表示从第一个位置开始切割(包括这个 位置),第二个参数表示切割的个数,之后参数表示在切割位置之后添加的元素,返回被切割的数组,原数组改变
参考菜鸟:http://www.runoob.com/jsref/jsref-splice.html
5.代码输出为
console.log((!+[]+[]+!+[]).length); // 输出8
console.log((!+[]+[]+!+[])); // 输出为truetrue
console.log((!+[]+[])); // 输出为true
console.log((!+[])); // true
console.log((+[])); // 0
解释:+号除了加法运算,字符串连接功能,还有正号的功能,会有两步操作,第一步先尝试转string,第二步尝试转number,所以+[]会先转成''=>0,然后再去反为真即true
6.下列代码输出
console.log((3<5,4>6)); // false
console.log((4>6,3<5)); // true