行为篇一,@JavaScript

Infinity 代表什么数据?

✂【回答】

  • Infinity 是一个存放表示正无穷大的数值-Infinity负无穷大
  • Infinity 是全局对象(global object)的一个属性,是全局变量
  • 在 ECMAScript 5 的规范中, Infinity 是只读的。

🖊【便签】

  • 注意 Infinity 首字母需大写。
  • 函数 isFinit(val) 可以用来检测数值是否有限。

请解释下题的输出结果

var val = "test";
console.log("output is " + (val === "Test") ? "123" : "456"); // 123

✂【回答】
该题涉及到了一个运算符优先级的问题,此处即 () > + > ?。所以代码实际打印的是:Boolean("output is false") 的条件值。

🖊【便签】

  • Boolean("任意字符") 结果为 true
  • Boolean("") 结果为 false

如何把 10.36 四舍五入为最接近的整数?

✂【回答】
实现“四舍五入”的方法有:

  • Math.round(x) 将数字四舍五入到最接近的整数,如:Math.round(10.36)
  • NumberObject.toFixed(num) 将数字四舍五入为给定的位数,如:(10.36).toFixed(0)
  • Math.floor(x) 将数字下舍入最接近的整数,如:Math.floor(10.36)
  • parseInt(string, radix) 解析字符串并返回整数,如:parseInt(10.36)
  • Math.trunc(x) 返回数字的整数部分,如:Math.trunc(10.36)
  • ~~ 做两次按位取反的操作,如:~~(10.36)

🖊【便签】

  • Math.ceil(x) 将数字上舍入最接近的整数,如:Math.ceil(10.36)
  • (10.36) === Number(10.36) // => trueNumber(10.36) === new Number(10.36) // => false

请解释以下题目会输出的结果(类型转换)

var temp = [0];
if ([0]) {
  console.log(temp == true);
} else {
  console.log("测试");
}
// 打印结果是:false

✂【回答】

  1. 尝试 console.log(temp);,得到 [[Prototype]]: Array(0)[0] 是数组对象
  2. 所有除 false0-00n""nullundefinedNaN 以外的皆为真值所以 [0] 是真值
  3. 在布尔值上下文中,真值会转换为 true,故 if ([0]) 等价于 if (true)。此处为隐式转换(强制转换)
  4. 运行 == 的判断规则,temp.valueOf() 转换为数值 0true 转化为 1,两者不相等。所以输出结果是 false

🖊【便签】
==!= 的判断规则:

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值----false 转化为 0true 转化为 1
  • 如果有一个数是字符串,另一个操作数是数值,将字符串转化成数值。
  • 如果一个操作数是对象,另一个操作数不是对象,将对象转化为基本操作类型(先 valueOf(),再 toString(),均不能得到基本类型的值则会报错),再比较。

请说说 new String(“A”) 和 String(“A”) 分别返回的结果,请解释为什么?

✂【回答】
返回结果:

  • new String("A") 打印为 String 对象,是复杂数据类型(引用类型)。
  • String("A") 打印为 A,是简单数据类型(基础类型)。

原因:

  1. new String('A') 通过 new 字符,调用了 String 构造函数,创建一个对象实例。
  2. 字符串字面量(通过单引号或双引号定义)和直接调用 String 方法(没有通过 new 生成字符串对象实例)的字符串都是基本字符串
  3. String("A") 生成的字符串是基本字符串。

🖊【便签】
简单数据类型(基础类型):

number, string, boolean, undefined, null

复杂数据类型(引用类型):

Array, function, Object

简单数据类型存储在栈内存,赋值的时候是将值复制一份给别人——值传递

复杂数据类型存储在堆内存,将堆内存的地址存储在栈内存。赋值的时候是将自己的地址复制一份给别人——址传递(引用传递)

当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JS 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。


劝学

你有没有注意到,昂扬的斗志,是何等不可抗拒而不可战胜吗?任何心灵有了它,就可以无所畏惧,所向无敌。——柏拉图《理想国》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值