面试分析二

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

 

posted @ 2017-05-08 11:06  我爱小明  阅读(141)  评论(0编辑  收藏  举报