gpt4 book ai didi

Javascript - === 和字符串的奇怪问题

转载 作者:行者123 更新时间:2023-12-02 06:06:37 25 4
gpt4 key购买 nike

我有这个代码:

...
var id1 = playerTick.gameId;
var id2 = that.gameId;
if(id1 === id2)
{}else{
throw "GameController instantiated with gameId '" + id2 + "' but tick has gameId '" + id1 + "'";
}

当我运行它时,我收到消息:

GameController 使用 gameId 'game1' 实例化,但 tick 具有 gameId 'game1'

当它正确打印“game1”作为两个属性的值时,=== 怎么会失败?作为测试,我做了这个可行的:

var g = "game1";
var g2 = "game1"
alert(g === g2); // Alerts true

有没有人知道我的 === 如何失败但错误消息打印相同文本的任何理论解释?两个值的类型都是对象。

提前谢谢你。

更新:

问题

事实证明,正如所有回复所指出的(谢谢你),类型并不相同。其中一个不是字符串,导致 === 评估为 false。

使用此函数检索查询参数后出现的问题:

function querystring(key) {
var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
var r=[], m;
while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
return r;
}

修复

function querystring(key) {
var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
var r=[], m;
while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
return r.toString(); // Ensures that a string is returned
}

最佳答案

你说它们是对象所以它们当然不一样:

var g = new String("game1"),
g2 = new String("game1");

g===g2 //false
g==g2 //false

“持有对象”的变量实际上只是对对象的引用。除非两个变量都引用内存中完全相同的对象,否则无论内容是什么,它们都不相等,除非您比较 g.toString() === g2.toString()//true.

请注意,当您执行 "hello"+var 时,var 会自动转换为 toString 形式:

null + "hello" === "nullhello"

关于Javascript - === 和字符串的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607719/

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