• 面试分析二


    1、使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?

    var a = {};
    var b = [];
    var c = null;
    console.log(typeof a); // object
    console.log(typeof b); // object
    console.log(typeof c); // object

    解决:

    var a = {};
    var b = [];
    var c = null;
    console.log(Object.prototype.toString.call(a)); // [object Object]
    console.log(Object.prototype.toString.call(b)); // [object Array]
    console.log(Object.prototype.toString.call(c)); // [object Null]

    注意:

    if([]){
        console.log('[] is true');
    }
    console.log([]==true);
    
    //[] is true
    //false

    2、NaN是什么?什么类型?怎么判断?

    NaN:not a number

    typeof NaN : Number

    isNaN(a) : 如果是数字返回false,否则返回true

    console.log(typeof NaN); //number
    console.log(NaN === NaN); //false
    console.log(NaN == NaN); //false
    console.log(NaN == undefined); //false
    console.log(NaN == false); //false
    console.log(NaN == 0); //false
    console.log(NaN == ''); //false

    3、判断一个字符串是不是回文字符串

    回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的。

    //方法一 效率低
    function isPalindrome(str) {
         str = str.replace(/W/g, '').toLowerCase();
         return (str == str.split('').reverse().join(''));
    }
    //方法二
    function isPalindrome(line) {  
        line += "";  
        for(var i=0,j=line.length-1;i<j;i++,j--){  
            if(line.charAt(i) !== line.charAt(j)){  
                return false;  
            }  
        }  
        return true;  
    } 

    4、输出超出想象:reverse() 会改变数组本身,并返回原数组的引用。

    var arr1 = "john".split('');
    var arr2 = arr1.reverse(); 
    var arr3 = "jones".split(''); 
    arr2.push(arr3); 
    console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1)); 
    console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
    //array 1: length=5 last=j,o,n,e,s
    //array 2: length=5 last=j,o,n,e,s

    5、运算

    console.log(1 + "2" + "2"); //'122'
    console.log(1 + +"2" + "2");//'32'
    console.log(1 + -"1" + "2");//'02'
    console.log(+"1" + "1" + "2");//'112'
    console.log( "A" - "B" + "2");//NaN2
    console.log( "A" - "B" + 2);//NaN
    
    //多个数字和数字字符串混合运算时,跟操作数的位置有关
    console.log(2 + 1 + '3');  //'33'
    console.log('3' + 2 + 1); // '321'
    //数字字符串之前存在数字中的正负号(+/-)时,会被转换成数字
    console.log(typeof '3'); // string
    console.log(typeof +'3'); //number
    //数字前添加 '',将数字转为字符串
    console.log(typeof 3); // number
    console.log(typeof (''+3)); //string
    //对于运算结果不能转换成数字的,将返回 NaN
    console.log('a' * 'sd'); //NaN
    console.log('A' - 'B'); // NaN
  • 相关阅读:
    集合异常原因与处理方式
    List的子类特点
    数据结构:数据的组织方式
    java对多态的了解
    JAVA电话本系统
    字符串转换数组
    登录用户名密码是否合法
    十三 spark 集群测试与基本命令
    十二 flume与kafka数据传输
    十一 spark- Standalone 集群
  • 原文地址:https://www.cnblogs.com/ilovexiaoming/p/6824065.html
Copyright © 2020-2023  润新知