Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Isn';数组对象是否与对象不同(两者上的ThinkTypeOf返回相同的值)?_Javascript_Arrays_Prototype - Fatal编程技术网

Javascript Isn';数组对象是否与对象不同(两者上的ThinkTypeOf返回相同的值)?

Javascript Isn';数组对象是否与对象不同(两者上的ThinkTypeOf返回相同的值)?,javascript,arrays,prototype,Javascript,Arrays,Prototype,其中两项测试失败。有人能解释为什么以及如何修复它吗 var assert=require('assert')。严格 Number.prototype.isNbr=true Number.prototype.isStr=false Number.prototype.isObj=错误 Number.prototype.isArr=false String.prototype.isNbr=false String.prototype.isStr=true String.prototype.isObj=

其中两项测试失败。有人能解释为什么以及如何修复它吗

var assert=require('assert')。严格
Number.prototype.isNbr=true
Number.prototype.isStr=false
Number.prototype.isObj=错误
Number.prototype.isArr=false
String.prototype.isNbr=false
String.prototype.isStr=true
String.prototype.isObj=false
String.prototype.isArr=false
Array.prototype.isNbr=false
Array.prototype.isStr=false
Array.prototype.isObj=false
Array.prototype.isArr=true
Object.prototype.isNbr=false
Object.prototype.isStr=false
Object.prototype.isObj=true
Object.prototype.isArr=false
描述('Number',()=>{
var x=0;
它('Is number',()=>{assert.ok(x.isNbr)})
它('Is string',()=>{assert.ok(!x.isStr)})
它('Is object',()=>{assert.ok(!x.isObj)})
它('Is array',()=>{assert.ok(!x.isObj)})
})
描述('String',()=>{
var x=“”;
它('Is number',()=>{assert.ok(!x.isNbr)})
它('Is string',()=>{assert.ok(x.isStr)})
它('Is object',()=>{assert.ok(!x.isObj)})
它('Is array',()=>{assert.ok(!x.isObj)})
})
描述('对象',()=>{
var x={};
它('Is number',()=>{assert.ok(!x.isNbr)})
它('Is string',()=>{assert.ok(!x.isStr)})
它('Is object',()=>{assert.ok(x.isObj)})
它('Is array',()=>{assert.ok(!x.isObj)})
})
描述('Array',()=>{
var x=[];
它('Is number',()=>{assert.ok(!x.isNbr)})
它('Is string',()=>{assert.ok(!x.isStr)})
它('Is object',()=>{assert.ok(!x.isObj)})
它('Is array',()=>{assert.ok(x.isObj)})
})
您可以保存到文件
t.js
,并按如下方式运行:

$mocha t.js
编辑I

修正线

var x=[];

@MarkMeyer指出的是错误的。在我的原始版本中,它是正确的,并且更正它不会更改结果,以测试是否使用数组。isArray(val):

var a=[1,2,3];
var b={a:1};
console.log(Array.isArray(a));

console.log(Array.isArray(b))正如@Paulpro巧妙地指出的,我的测试很糟糕。我在检查
.isObj
我应该在哪里检查
.isArr


如果我修正了一切都正常运行的问题

这让人困惑:为什么要定义
var x={}在您的阵列测试中?为什么要用
it('is array',()=>{assert.ok(x.isObj)}
isObj
测试
is array
?您在测试中从未实际使用过
isArr
。这没有任何意义。数组是一个对象。所有这些装箱类型都是对象。JavaScript是一种面向对象的语言。几乎所有东西都是一个物体。考虑这一点:<代码>空类型< />代码>代码>新字符串()/<代码>代码>新编号()/<代码>代码>新的MAP()/代码>等等。它是
“object”
,但它实际上不是从
object.prototype中派生出来的。你为什么要这样做?你在这里解决什么问题?我添加了编写测试的原因和更好的方法,这样你就不会添加内置对象的
原型了。谢谢,但我正在构建一个原型方法库,所以你的方法不适合我的目的,除了库之间可能发生的冲突之外,我不明白为什么这是一种不好的做法。当前的对象已经提供了一系列的功能,但是缺少这些功能,所以很自然地想要对其进行补充