JavaScript instanceof:无法定义函数参数的实例

ser*_*nni 4 javascript arguments function typeof instanceof

我还在学习JavaScript,阅读书籍,使用FireBug,进行实验.

我很惊讶并且坚持下面的事情.

有功能声明:

    var t = function (args){
            ...
    }
Run Code Online (Sandbox Code Playgroud)

假设它是varargs.

我称之为:

<body onload="t({to:100,from:0})">
Run Code Online (Sandbox Code Playgroud)

from通过调用可以获得参数值:

args.from
Run Code Online (Sandbox Code Playgroud)

结果typeof args.fromnumber
看起来很健康.
注意: number是小写的

我对什么是实例感兴趣args.from.
实际上,无法获得其实例值.
尝试:

args.from instanceof Number
args.from instanceof String
args.from instanceof Object
args.from instanceof Boolean
Run Code Online (Sandbox Code Playgroud)

它不是Number- 非常奇怪
它不是Object- 很奇怪
它不是String- 那没关系
它不是Boolean- 那没关系
它既不是null也不'undefined'- 看起来不错.

它是什么?

SLa*_*aks 5

那是一个原始的数值.
它不是任何类的实例.

instanceof只能在对象上返回true(为其typeof返回"object""function").

这与args 对象无关; 你可以得到同样的虚假4 instanceof Number.

相比之下,new Number(4)是一个包裹原语的对象4,所以typeof new Number(4) === "objectnew Number(4) instanceof Number === true

  • 从中可以看出,您不应该在Java的所有地方使用`instanceof`进行严格的类型检查.这根本不是Javascript适合的编程风格.使用[duck typing](http://en.wikipedia.org/wiki/Duck_typing)并记录预期的参数和接口. (3认同)