一种半靠得住的办法来测试一个数字是否等于 NaN,是应用内置函数 isNaN(),但即使应用 isNaN() 依然并非是一个完美的解决筹划。
一个更好的解决办法是应用 value !== value,如不雅值等于NaN,只会产生true。别的,ES6供给了一个新的 Number.isNaN() 函数,这是一个不合的函数,并且比老的全局 isNaN() 函数更靠得住。
8.下列代码将输出什么?并解释原因。
- console.log(0.1 + 0.2);
- console.log(0.1 + 0.2 == 0.3);
一个稍微有点编程基本的答复是:“你不克不及肯定。可能会输出“0.3”和“true”,也可能不会。JavaScript中的数字和浮点精度的处理雷同,是以,可能不会老是产生预期的结不雅。“
以上所供给的例子就是一个演示了这个问题的典典范子。但进出意表的是,它会输出:
- 0.30000000000000004
- false
9.评论辩论写函数 isInteger(x) 的可能办法,用于肯定x是否是整数。
这可能听起来是小菜一碟,但事实上,这很琐碎,因为ECMAScript 6惹人了一个新的┞俘以此为目标 Number.isInteger() 函数。然而,之前的ECMAScript 6,会更复杂一点,因为没有供给类似的 Number.isInteger() 办法。
问题是,在ECMAScript规格解释中,整数只概念上存在:即,数字值老是存储为浮点值。
推敲到这一点,最简荡竽暌怪最干净的ECMAScript6之前的解决办法(同时也异常稳健地返回 false ,即矢荷琐非数字的值,如字符串或 null ,被传递给函数)如下:
- function isInteger(x) {
- return (x^0) === x;
- }
下面的解决办法也是可行的,固然不如膳绫擎那个办法优雅:
- function isInteger(x) {
- return Math.round(x) === x;
- }
或:
- function isInteger(x) {
- return (typeof x === 'number') && (x % 1 === 0);
- }
相当广泛的一个不精确的解决筹划是:
- function isInteger(x) {
- return parseInt(x, 10) === x;
- }
固然这个以 parseInt函数为基本的办法在 x 取很多值时都能工作优胜,但一旦 x 取值相昔时夜的时刻,就会无法正常工作。问题在于 parseInt() 在解析数字之前强迫其第一个参数到字符串。是以,一旦数量变得足够大年夜,它的字符串就会表达为指数情势(例如, 1e+21)。是以,parseInt() 函数就会去解析 1e+21,但当达到 e字符串的时刻,就会停止解析,是以只会返回值 1。留意:
- > String(1000000000000000000000) '1e+21'
- > parseInt(1000000000000000000000, 10) 1
- > parseInt(1000000000000000000000, 10) === 1000000000000000000000
- false
10.下列代码行1-4若何排序,使之可以或许在履行代码时输出到控制台? 为什么?
- (function() {
- console.log(1);
- setTimeout(function(){console.log(2)}, 1000);
- setTimeout(function(){console.log(3)}, 0);
- console.log(4);
- })();
序号如下:
让我们先来解释比脚绫趋显而易见的那部分:

网友点评
精彩导读
科技快报
品牌展示