比较对象字符串,字符串标识运算符和字符串

时间:2019-05-11 02:08:49

标签: javascript reactjs identity

我正在使用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")
}

1 个答案:

答案 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

字符串在字符串化时,其首尾均包含定界符,而原始字符串没有这些定界符。