是否可以检查2个JavaScript字符串是否引用同一个对象(比如检查2个非原始对象的相等性)?
当浏览2个对象树时,我需要查看2个对象是否是相同的引用。当那些树深处的那些实例是字符串时,似乎无法检测它们实际上是相同的实例还是仅仅是相等的值。或者有吗?
对象树是动态构造的,所以在这种情况下字符串实习应该没有问题。
答案 0 :(得分:4)
简短的回答是“不”,“string”是原始数据类型,JavaScript不提供对其内存位置的深入了解。但是,您可以创建一个字符串“object”而不是一个原语,如下所示:
var s1 = new String('hello'); // create a string object
var s2 = s1; // pass it as a reference
var s3 = new String('hello'); // create another string object w/ same value as "s1"
console.log(s1 === s2); // true
console.log(s1 === s3); // false
请注意,创建这样的字符串可能会产生负面影响(即typeof new String('hello') === 'object'
)。有关详细信息,请参阅Mozilla文档的“Distinction between string primitives and String objects”部分。