JavaScript Set delete方法疑问:常量引用与模板字面量调用差异
Set.delete()方法的类型匹配问题解答
核心逻辑:Set用严格相等判断元素
Set的delete()、has()等方法,都是基于**严格相等运算符(===)**匹配元素的——会同时检查值的内容和数据类型,只有两者完全一致时才会匹配成功。
针对你的问题逐一拆解
直接传
someConst.id返回falsesomeConst.id是数值类型的122,但你的Set里存储的是字符串类型的'122',122 === '122'结果为false,所以delete()找不到对应元素,返回false。模板字面量
${someConst.id}返回true
模板字面量插值时会自动把数值类型的someConst.id转为字符串,等价于执行String(someConst.id),最终得到字符串'122',和Set里的元素严格相等,因此delete()成功返回true。硬编码
'122'返回true
硬编码的'122'本身就是字符串类型,和Set中存储的元素完全一致,严格相等成立,所以delete()可以成功删除。带引号的拼接(如
"'"+someConst.id+"'")返回false
这种方式得到的是带单引号的字符串'122'(单引号是字符串内容的一部分),但你的Set里的元素是不带单引号的'122',两者内容不匹配,严格相等不成立,因此delete()失败。
总结
Set的方法会严格检查数据类型和值的内容,只有两者完全匹配时才会执行成功。你的问题本质是数值与字符串的类型不匹配,模板字面量的自动类型转换刚好解决了这个问题。
内容的提问来源于stack exchange,提问作者Barbicane
相关产品推荐
相关产品推荐

