这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战。
parseInt
// 简单解释以下为什么会输出那些内容
['0', '1', '2'].map(parseInt)
答案:[0, NaN, NaN, NaN]
说明
// Array.map 是遍历数组,根据回调函数返回一个同等长度的数组
// 原代码 可以扩写成
['0', '1', '2'].map((num, index) => {
// parseInt(str, radix) 是将字符串 转成整数
// radix 是2-36之间的整数,是被解析字符串的表示数字进制基数
// parseInt('0', 0), radix为0,是无效,默认为10,10进制的1 等于 1
// parseInt('1', 1), radix为1,是无效,因为没有1进制,等于 NaN
// parseInt('2', 2), radix为2,是无效,因为2进制的2不存在,等于 NaN
return parseInt(num, index);
})
valueOf和toString
// console.log 各自会打印什么信息
const data = {
valueOf: () => 123,
toString: () => 'abc',
}
console.log(data == 123);
console.log(data === 123);
console.log(`${data}` === 'abc');
console.log(data + '' === 'abc');
答案: true false true false
说明
const data = {
valueOf: () => 123, // 设置 data 返回该对象的原始值 123
toString: () => 'abc', // 设置 data 返回该对象的字符串 'abc'
}
// 抽象(非严格)相等比较 时候,data是调用valueOf,为 123 == 123,
// data 直接使用对象原始值 valueOf() 来比较 123 == 123 为 true
console.log(data == 123);
// 严格相等比较 时候,是data的类型是object,不是number
// 所以 data === 123 为false
console.log(data === 123);
// `${data}` ES6的字符串模板是将变量的字符串表示显示出来
// 所以 `${data}` 是调用 data.toString() 返回字符串表示
console.log(`${data}` === 'abc');
// data + '' 是将 data 的对象值转换成字符串
// 所以等于 123 + '' = '123', '123' === 'a'为false
console.log(data + '' === 'abc
数组隐式转换
// 执行以下代码, 会有什么结果
var a1 = [0];
if (a1) {
console.log(a1 == true);
} else {
console.log(a1);
}
var a2 = [1];
if (a2) {
console.log(a2 == true);
} else {
console.log(a2);
}
答案:false true
说明
-
- 当 a1 = [0] 在 if 的条件判断中时,会转成布尔值,而 Boolean([0])为 true
-
- a1 == true 进行比较时,[0]被隐式调用数组的 join 方法转换成了 '0',所以 [0].join() == true 为 false
-
- 当 a2 = [1] 在 if 的条件判断中时,会转成布尔值,而 Boolean([1])为 true
-
- a2 == true 进行比较时,[1]被转换成了 [1].join(),所以 [1].join() == true 为 t