面试分析二
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