先来看看数据类型基础相关的两道面试题和答案
//类型转换相关问题
var bar=true;
console.log(bar+0);
console.log(bar+"xyz");
console.log(bar+true);
console.log(bar+false);
console.log('1'>bar);
console.log(1+'2'+false);
console.log('2' + ['koala',1]);
var obj1 = {
a:1,
b:2
}
console.log('2'+obj1);
var obj2 = {
toString:function(){
return 'a'
}
}
console.log('2'+obj2)
//输出结果 1 truexyz 2 1 false 12false 2koala,1 2[object Object] 2a
//作用域和NaN 这里不具体讲作用域,意在说明NaN
var b=1;
function outer(){
var b=2;
function inner(){
b++;
console.log(b);
var b=3;
}
inner();
}
outer();
//输出结果 NaN
js中的强制转换规则
Number
Number运算符转换规则:
- null 转换为 0
- undefined 转换为 NaN
- true 转换为 1,false 转换为 0
- 字符串转换时遵循数字常量规则,转换失败返回 NaN
字符串"123"可以转换为数字123
String
String 运算符转换规则
- null 转换为 ‘null’
- undefined 转换为 undefined
- true 转换为 ‘true’,false 转换为 ‘false’
- 数字转换遵循通用规则,极大极小的数字使用指数形式
Boolean
ToBoolean 运算符转换规则
除了下述 6 个值转换结果为 false,其他全部为 true:
undefined
null
-0
0或+0
NaN
‘’(空字符串)
假值以外的值都是真值。其中包括所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
NaN相关总结
NaN的概念
NaN 是一个全局对象的属性,NaN 是一个全局对象的属性,NaN是一种特殊的Number类型。
隐式类型转换
+
隐式类型会转换成string
对象和数组是引用值,转换规则:内置valueOf toString 函数,进行+ 操作时 调用valueOf 返回结果是原始值,结束,返回结果不是原始值,继续调用toString方法
空数组转换后是一个空串
不同类型转换,一定会转换为数字后才比较 false == ‘0’
null 0 false undefined==0 false
显示类型转换
‘1’+5=15
对象和数组是引用值,转换规则:内置valueOf 和 toString 函数,进行+ ==操作时 调用valueOf 返回结果是原始值,结束,返回结果不是原始值,继续调用toString方法