Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript字符串计算不正确?_Javascript_Jquery - Fatal编程技术网

JavaScript字符串计算不正确?

JavaScript字符串计算不正确?,javascript,jquery,Javascript,Jquery,使用jQuery和jQuery URL插件 我有以下代码: $('#secondary-nav > li > ul > li > a').each( function() { var aHref = new String( $(this).attr('href') ); alert (aHref); var wUrl = new String( $.url().attr('file') ); alert (wUrl); alert

使用jQuery和jQuery URL插件

我有以下代码:

$('#secondary-nav > li > ul > li > a').each( function() {
    var aHref = new String( $(this).attr('href') );
    alert (aHref);
    var wUrl = new String( $.url().attr('file') );
    alert (wUrl);
    alert ( aHref === wUrl );
});

aHref和wUrl都是字符串对象(我已经使用instanceof确认了这一点)。但这种比较结果是错误的。代码位于“pageA.html”上,其中一个锚点的href为“pageA.html”,但其计算结果永远不会为true。

无需创建新的字符串对象,您只需将其替换为
var aHref=$(this.attr('href')。您不能像比较简单字符串那样轻松地比较对象。如果不创建新对象,
aHref===wUrl
将计算为
true


在比较对象时,它们通常被转换为相同的类型,在大多数情况下是string(比较string和int等),但如果它们都是相同的类型(
string
,在您的情况下),它们不会作为简单字符串进行比较,而是作为对象进行比较,在这种情况下,它们是不同的对象。这是因为引用对象的变量引用特定的对象实例(类似于其他语言中的指针)。由于您正在处理两个不同的对象(它们可能具有相同的构造函数参数,但仍分别位于内存中),
==
=
都将计算为
false
。另外,
aHref.toString()==wUrl.toString()
,将被计算为
true
,因为它们首先被转换成简单的字符串,在这种情况下,它们并不表示对象,而是表示对象的字符串化表示。

无需创建新的字符串对象,只需将它们替换为
var aHref=$(此).attr('href')。您不能像比较简单字符串那样轻松地比较对象。如果不创建新对象,
aHref===wUrl
将计算为
true

在比较对象时,它们通常被转换为相同的类型,在大多数情况下是string(比较string和int等),但如果它们都是相同的类型(
string
,在您的情况下),它们不会作为简单字符串进行比较,而是作为对象进行比较,在这种情况下,它们是不同的对象。这是因为引用对象的变量引用特定的对象实例(类似于其他语言中的指针)。由于您正在处理两个不同的对象(它们可能具有相同的构造函数参数,但仍分别位于内存中),
==
=
都将计算为
false
。另外,
aHref.toString()==wUrl.toString()
将被计算为
true
,因为它们首先被转换为简单字符串,在这种情况下,它们不表示对象,而是表示对象的字符串化表示。

使用:
警报(aHref==wUrl)不比较
类型
。或者您可以强制字符串:

( aHref+'' === wUrl+'' )
使用:
警报(aHref==wUrl)不比较
类型
。或者您可以强制字符串:

( aHref+'' === wUrl+'' )

你能把aHref和wUrl放在一个例子里吗


===如果字符串严格相等(即相同顺序中的相同字符数),则返回true

您能在示例中公布aHref和wUrl是什么吗


===如果字符串严格相等(即相同顺序的相同字符数),则返回true

比较两个对象时,javascript将查看它们是否实际上是相同的对象,而不是它们是否看起来相同。因此,
{foo:'bar'}=={foo:'bar'}
将计算为
false

如果要按值比较字符串,则必须使用字符串原语:
var aHref=$(this.attr('href')
&
var wUrl=$.url().attr('file')


如果出于某种奇怪的原因,您坚持使用字符串构造函数创建字符串,您可以将它们强制为基本体:

alert ( aHref.toString() === wUrl.toString() );

当比较两个对象时,javascript将查看它们是否实际上是相同的对象,而不是它们是否看起来相同。因此,
{foo:'bar'}=={foo:'bar'}
将计算为
false

如果要按值比较字符串,则必须使用字符串原语:
var aHref=$(this.attr('href')
&
var wUrl=$.url().attr('file')


如果出于某种奇怪的原因,您坚持使用字符串构造函数创建字符串,您可以将它们强制为基本体:

alert ( aHref.toString() === wUrl.toString() );

Javascript混淆地区分了字符串值和字符串对象。更令人困惑的是,它们在许多情况下是可互换的
=
是为数不多的几个实际起作用的案例之一。对于对象,
==
测试两边是否是由一个特定构造函数调用创建的相同对象。另一方面,字符串值按内容进行比较

使用
新字符串(…)
可以明确地要求从传入构造函数的值中获取实际的字符串对象。这意味着您在以后比较它们时会得到严格意义上的
==


要解决您的问题,只需从代码中省略
新字符串

Javascript会混淆地区分字符串值和字符串对象。更令人困惑的是,它们在许多情况下是可互换的
=
是为数不多的几个实际起作用的案例之一。对于对象,
==
测试两边是否是由一个特定构造函数调用创建的相同对象。另一方面,字符串值按内容进行比较

使用
新字符串(…)
可以明确地要求从传入构造函数的值中获取实际的字符串对象。这意味着您在以后比较它们时会得到严格意义上的
==


要解决您的问题,只需从代码中省略
新字符串

出于兴趣,如果您使用==而不是==,它们是否比较正确?出于兴趣,如果您使用==而不是==?+1来进行比较,它们是否比较正确