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中派生出来的。你为什么要这样做?你在这里解决什么问题?我添加了编写测试的原因和更好的方法,这样你就不会添加内置对象的原型了。谢谢,但我正在构建一个原型方法库,所以你的方法不适合我的目的,除了库之间可能发生的冲突之外,我不明白为什么这是一种不好的做法。当前的对象已经提供了一系列的功能,但是缺少这些功能,所以很自然地想要对其进行补充