- function foo1() {
- return { bar: "hello" };
- }
- function foo2() {
- return { bar: "hello" };
- }
进出意表的是,这两个函数返回的内容并不雷同。更确切地说是:
当调用一个函数的时刻,JavaScript不请求参数的数量匹配函数定义中的参数数量。如不雅传递的参数数量大年夜于函数定义中参数数量,那么多余参数将简单地被忽视。另一方面,如不雅传递的参数数量小于函数定义中的参数数量,那么缺氨赡参数在函数中被引用时将会给一个 undefined值。所以,在膳绫擎的例子中,简单地检查第2个参数是否不决义,就可以响应地肯定函数被调用以及进行的方法。
- console.log("foo1 returns:");
- console.log(foo1());
- console.log("foo2 returns:");
- console.log(foo2());
1、应用 typeof bar === "object" 来肯定 bar 是否是对象的潜在陷阱是什么?若何避免这个陷阱?
- console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(10));
将产生:
- true
- false
- foo1 returns:Object {
- bar: "hello"
- }
- foo2 returns:undefined
这不仅是令人惊奇,并且特别让仁攀困惑的是, foo2()返回undefined却没有任何缺点抛出。
原因与如许一个事实有关,即分号在JavaScript中是一个可选项(尽管省略它们平日是异常糟糕的情势)。其结不雅就是,当碰着 foo2()中包含 return语句的代码行(代码行膳绫腔有其他任何代码),分号会急速主动插入到返回语句之后。
也不会抛掉足误,因为代码的其余部分是完全有效的,即使它没有获得调用或做任何工作(相当于它就是是一个未应用的代码块,定义了等同于字符串 "hello"的属性 bar)。
这种行动也支撑放置左括号于JavaScript代码行的末尾,而不是新代码行开首的商定。正如这里所示,这不仅仅只是JavaScript中的一个风格偏好。
(a)当用户点击“Button 4”的时刻会输出什么到控制台,为什么?(b)供给一个或多个备用的可按预期工作的实现筹划。
7. NaN 是什么?它的类型是什么?你若何靠得住地测试一个值是否等于 NaN ?
- (function(){ var a = b = 3; })();
- console.log("a defined? " + (typeof a !== 'undefined'));
- console.log("b defined? " + (typeof b !== 'undefined'));
NaN 属性代表一个“不是数字”的值。这个特别的值是因为运算不克不及履行而导致的,不克不及履行的原因要么是因为个中的运算对象之一非数字(例如, "abc" / 4),要么是因为运算的结不雅非数字(例如,除数为零)。
固然这看上去很简单,但 NaN 有一些令人惊奇的特点,如不雅你不知道它们的话,可能会导致令人头痛的bug。
起首,固然 NaN 意味着“不是数字”,然则它的类型,不管你信不信,是 Number:
- console.log(typeof NaN === "number"); // logs "true"

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