gpt4 book ai didi

javascript - 比较对象字符串,字符串化身份运算符和字符串

转载 作者:行者123 更新时间:2023-11-29 20:38:58 27 4
gpt4 key购买 nike

我正在开发一个 reactjs 组件,我的同事遇到了身份运算符和 JSON.stringify() 的这个问题。我不确定他为什么在代码中使用 stringify - 但我很困惑为什么这些 if/else block 不起作用。

为什么其中一些比较不起作用,即使它们具有相同的 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")
}

最佳答案

primitives 上使用 JSON.stringify 时,字符串化过程必须能够反射(reflect)原始类型的类型,以便使用 JSON.parse 进行反序列化会产生相同的副本。因此,当 JSON.stringify 字符串时,双引号会放在字符串两边:

console.log(JSON.stringify('foo'));

例如,这是为了区分 false 的字符串化字符串和 false 的字符串化 boolean(或字符串化的字符串'23' 来自 23 的字符串化 number

因此,您的测试

JSON.stringify(objOne.fruit) === "strawberry"

不要评估为 true,因为它正在测试是否

'"strawberry"' === "strawberry"

字符串在字符串化后,在其第一个和最后一个索引处包含分隔符,而原始字符串没有这些分隔符。

关于javascript - 比较对象字符串,字符串化身份运算符和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56086630/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com