rainit2006 / JS-room

javascript knowledge
0 stars 0 forks source link

js面试题 #16

Open rainit2006 opened 6 years ago

rainit2006 commented 6 years ago

https://github.com/dwqs/blog/issues/17

■对于 return 、break、continue 等语句,如果后面紧跟换行,解析器一定会自动在后面填充分号(;)

function foo2()
{
  return
  {
      bar: "hello"
  };
}

等同于

function foo2()
{
  return;
  {
      bar: "hello"
  };
}

所以该函数返回 undefined。

■ NaN NaN 是 Not a Number 的缩写,JavaScript 的一种特殊数值,其类型是 Number,可以通过 isNaN(param) 来判断一个值是否是 NaN。

console.log(isNaN(23)); //false
console.log(isNaN('ds')); //true

ES6 中,isNaN() 成为了 Number 的静态方法:Number.isNaN().

■ 浮点型处理 JavaScript 中的浮点数采用IEEE-754 格式的规定,这是一种二进制表示法,可以精确地表示分数,比如1/2,1/8,1/1024,每个浮点数占64位。但是,二进制浮点数表示法并不能精确的表示类似0.1这样 的简单的数字,会有舍入误差。 对于保证浮点数计算的正确性,有两种常见方式。 一是先升幂再降幂.

function add(num1, num2){
  let r1, r2, m;
  r1 = (''+num1).split('.')[1].length;
  r2 = (''+num2).split('.')[1].length;

  m = Math.pow(10,Math.max(r1,r2));
  return (num1 * m + num2 * m) / m;
}
console.log(add(0.1,0.2));   //0.3
console.log(add(0.15,0.2256)); //0.3756

二是是使用内置的 toPrecision() 和 toFixed() 方法,注意,方法的返回值字符串。

function add(x, y) {
    return x.toPrecision() + y.toPrecision()
}
console.log(add(0.1,0.2));  //"0.10.2"