JS练习题(一)

计算以下代码的输出。

var result = 100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false;
console.log(result)

答案:“NaNTencentnull9false”
知识点:
① 其他数据类型转换为number类型的规则(boolean,null,undefined)
② 其他数据类型转换为string类型的规则([]等)
③ 字符串拼接的适用场景

============================================
2.

console.log([] == false);
console.log(![] == false);

答案:true, false
知识点:
① == 比较时的转换规则,见下方总结
② 运算符优先级问题,! 优先级高于 ==

一点补充:== 比较时的转换规则

  • 对象 == 字符串时:对象====>字符串
  • null == undefined为true(===时为false),除此之外,两者均与其他任何值不相等。
  • NaN与任何值都不 ==
  • 其他情况下,均转换为number类型再比较(隐式转换,通过Number方法)

============================================
3.

{} + 0 ? alert("ok") : alert("no");
0 + {} ? alert("ok") : alert("no");

答案:“no”, “ok”
知识点:
① 三元运算符
② 转换为boolean类型
③ {}的双重身份

又一些补充

{}的作用: 对象; 代码块

  • 简单的情况:当{}放在运算符后面时,如0 + {},则一定是数学运算。
    {}在转换为number类型的过程中,首先转换为string类型"[object Object]",立即完成字符串拼接。
    在这里插入图片描述
  • 复杂的情况:{}出现在运算符前面时,浏览器认为它表示代码块,是单独存在的,不参与后面的计算,因此:
    在这里插入图片描述
    但也可通过加()的方式,强行将它们绑在一起,使得浏览器认为它们是一个整体,这样就会参与后面的运算。
    在这里插入图片描述

============================================
4.

let res = Number("12px");
if(res === 12){
	alert(200);
}else if(res === NaN){
	alert(NaN);
}else if(typeof res === "number"){
	alert("number");
}else{
	alert("Invalid Number");
}

答案:“number”
知识点:
① Number()方法的转换机制
② NaN ! == NaN
③ typeof NaN === “number”

============================================
5.

var a = {}, b = "0", c = 0;
a[b] = "你好";
a[c] = "再见"; 
console.log(a[b]);

var a = {}, b = Symbol("1"), c = Symbol("1");
a[b] = "你好";
a[c] = "再见"; 
console.log(a[b]);

var a = {}, b = {n: "1"}, c = {m: "2"};
a[b] = "你好";
a[c] = "再见"; 
console.log(a[b]);

答案:“再见”, “你好”, “再见”
知识点:
① 对象的属性名为对象时的转换
② Symbol() 唯一值

============================================
6.

var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x);
console.log(b.x);

答案:undefined, {n: 2}
知识点:
① 堆栈内存
② 连等

============================================
7.

var x = [12,23];
function fn(y){
	y[0] = 100;
	y = [100];
	y[1] = 200;
	console.log(y);
}
fn(x);
console.log(x);

答案:[100,200], [100,23]
知识点:
① 函数创建与执行时的堆栈内存机制
② 变量提升也需要考虑在内

详解见函数的创建和执行过程

============================================
8.

let arr = [1,2,3,4];
arr = arr.map(parseInt);
console.log(arr);

答案: [1,NaN,NaN,NaN]
知识点:
① 数组迭代方法map,[数组的迭代方法总结-链接占位处]
② parseInt的第二个参数,你不知道的parseInt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值