平等、深度平等和严格平等的区别
Difference between equal, deep equal, and strict equal
查看关于assert
模块的Node.js文档,我看到了assert.equal
, assert.strictEqual
和assert.deepEqual
等功能。
equal, deep equal和strict equal到底有什么区别?
正如其他人所说,文档确实说明了区别是什么,但可能不那么容易看到。
断言。equal的作用与JavaScript中的双等号相同:
assert.equal(50, 50); //true
assert.equal(50, "50"); //true
assert.equal(1, true); //true
assert.equal(50, 70); //false
assert.equal({n:1}, {n:1}); //false
这意味着你得到值检查,javascript奇特的类型转换开始。
断言。strictEqual的工作原理类似于JavaScript中的三重等号:
assert.strictEqual(50, 50); //true
assert.strictEqual(50, "50"); //false
assert.strictEqual(1, true); //false
assert.strictEqual(50, 70); //false
assert.equal({n:1}, {n:1}); //false
这意味着对值和类型进行严格的比较检查。
这两种方法都通过引用而不是值来检查复杂对象。这就是deepEquals发挥作用的地方。deepEquals检查对象及其属性的值是否相等:
assert.deepEqual({n:1}, {n:1}); //true
assert.deepEqual({n:1}, {n:true}); //true
assert.deepEqual({n:1}, {n:"1"}); //true
deepEquals对嵌套属性和复杂对象的子对象进行类型和值的==比较。
然后你有deepStrictEqual就像deepEqual,除了它增加了严格的检查类型和值:
assert.deepStrictEqual({n:1}, {n:1}); //true
assert.deepStrictEqual({n:1}, {n:true}); //false
assert.deepStrictEqual({n:1}, {n:"1"}); //false
所以equal和strictEqual测试值的相等性,并且strict添加类型,deeppequal和deepStrictEqual检查两个对象是否包含相同的属性和值。
W3C学校有一些关于这些主题的漂亮,简单的文档:assert.equalassert.strictEqualassert.deepEqualassert.deepStrictEqual
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在ember/handlers中使用value和valueBinding有什么区别
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- 使用大括号和不使用bracs调用函数的区别
- webpack开发模式和生产构建模式之间有什么区别
- 使用Rhino和ASE执行Javascript的区别
- servlet和代理servlet之间的区别
- Javascript 类型未定义和 void 之间的区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 平等、深度平等和严格平等的区别