我正在使用reactjs组件,我的同事通过身份运算符和JSON.stringify()遇到了这个问题。我不确定为什么他在代码中使用了stringify-但是我很困惑为什么这些if / else块不起作用。
为什么即使某些类型具有相同的typeof,这些比较中的一些也不起作用?
因此,如果数据存储在本地存储中并且他们必须执行JSON.stringify-下一步要清除数据以进行匹配的下一步是什么?
https://jsfiddle.net/g8x761y2/6/
const objOne = {
fruit: 'strawberry',
nutrients: {
minerals: {
name: 'calcium'
}
}
};
const objTwo = {
fruit: 'strawberry',
nutrients: {
minerals: {
name: 'calcium'
}
}
};
const fruit = "strawberry"
console.log("obj fruit", objOne.fruit)
console.log("string fruite", fruit)
console.log("obj fruit type", typeof(objOne.fruit))
console.log("string fruit type", typeof(fruit))
console.log("obj fruit stringify type", typeof(JSON.stringify(objOne.fruit)))
console.log("isMatch with two stringify", JSON.stringify(objOne.fruit) === JSON.stringify(fruit))
console.log("isMatch with just one stringify", JSON.stringify(objOne.fruit) === fruit)
if (JSON.stringify(objOne.fruit) === "strawberry") {
console.log("1")
}
if (objOne.fruit === "strawberry") {
console.log("2")
}
if (JSON.stringify(objOne.fruit) === "strawberry" && JSON.stringify(fruit) === "strawberry") {
console.log("3")
}
if (objOne.fruit === "strawberry" && fruit === "strawberry") {
console.log("4")
}
if (JSON.stringify(objOne.fruit) === "strawberry" && fruit === "strawberry") {
console.log("5")
}
答案 0 :(得分:2)
在基元上使用JSON.stringify
时,字符串化过程必须能够反映原始的基元的 type ,以便使用{{1 }}产生相同的副本。因此,JSON.parse
输入字符串时,字符串两端会引起双引号:
JSON.stringify
例如,这是为了区分console.log(JSON.stringify('foo'));
的字符串和false
的字符串 boolean (或者来自false
的字符串'23'
的字符串化 number )。
因此,您的测试
23
不要评估JSON.stringify(objOne.fruit) === "strawberry"
,因为它正在测试是否
true
字符串在字符串化时,其首尾均包含定界符,而原始字符串没有这些定界符。