• 妙味公开课-笔试题1


    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

    参考++a和++a的区别

    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
    

    解释:,号表达式,返回的是最后一个表达式的值,第一个最后的表达式是4>6,所以fasle,第二个逗号运算符最后一个表达式是3<5,所以为true

  • 相关阅读:
    一个网络传输框架——zeroMQ 调研笔记
    Node.js的cluster模块——Web后端多进程服务
    boost::spirit unicode 简用记录
    HTTP的长连接和短连接——Node上的测试
    MongoDB 驱动以及分布式集群读取优先级设置
    Lua知识备忘录
    MongoDB使用小结:一些常用操作分享
    此项目与Visual Studio的当前版本不兼容的报错
    @Controller和@RestController的区别
    SQLSERVER中计算某个字段中用分隔符分割的字符的个数
  • 原文地址:https://www.cnblogs.com/bonly-ge/p/9271537.html
Copyright © 2020-2023  润新知