JavaScript(三)

JS代码解析与陷阱
本文深入探讨了JavaScript中常见的代码理解和执行陷阱,包括对象比较、扩展运算符、严格模式、eval函数的使用以及循环控制语句。通过具体示例,揭示了JavaScript在不同场景下的行为特性。

1、下面代码的输出是什么?

function checkAge(data) {
  if (data === { age: 18 }) {
    console.log("You are an adult!");
  } else if (data == { age: 18 }) {
    console.log("You are still an adult.");
  } else {
    console.log(`Hmm.. You don't have an age I guess`);
  }
}

checkAge({ age: 18 });

引用类型对象在堆内存中是唯一的,不存在两个引用类型的对象相等的情况。该题中的{ age: 18 }是不同的两个对象,在函数checkAge中的实参里边对象,是arguments里的一个对象,而if语句中的对象,可以理解为当前作用域中的一个对象。所以是不相等的,最后会执行else语句,也就是输出:Hmm.. You don't have an age I guess

 

2、下面代码的输出是什么?

function getAge(...args) {
  console.log(typeof args);
}

getAge(21);

扩展运算符(...args)返回的是一个数组,而typeof数组的时候是返回object,因为数组也是对象。顺便说一下,object可以返回的数据类型有6种:number、string、undefined、boolean、object、symbol。

3、下面代码的输出是什么?

function getAge() {
  "use strict";
  age = 21;
  console.log(age);
}

getAge();

在严格模式下,如果对没有声明的变量进行赋值的话,会导致引用错误,所以这一题在程序运行到age = 21的时候就已经报错:ReferenceError,不会执行console.log。

 

4、下面代码的输出是什么?

const sum = eval("10*10+5");

eval函数接收一个字符串,然后将字符串转为表达式,然后去执行这个表达式。所以在这里js引擎会当做

 

10*10+5

这样的一个表达式来进行计算求值,然后返回数字105。

PS:eval函数会导致性能下降(在执行过程中修改了词法作用域,导致前面js引擎的优化无效),谨慎使用。

 

5、下面代码的输出是什么?

for (let i = 1; i < 5; i++) {
  if (i === 3) continue;
  console.log(i);
}

continue会导致程序跳出当前迭代,在这个例子中,当i等于3的时候,就不会输出i的值。而for循环中,只要i小于5都会执行函数体,所以最后输出的是:1、2、4

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值