如何比较两个十六进制数?

4
我需要比较来自XML标记属性字段的两个十六进制值,我正在尝试这样做:
var fill = $(this).attr( "fill" );
// console.log( fill.toString(16) );
if ( fill === "#FF00FF" )

但是它不起作用,有什么想法吗?

1
еҪ“jQueryзҡ„attrе·Із»Ҹиҝ”еӣһдёҖдёӘеӯ—з¬ҰдёІж—¶пјҢеҒҡдёҖдёӘtoString()жҳҜеҗҰеӨҡдҪҷпјҹ - Joseph
我只是为了在控制台上查看结果而使用toString,我并没有使用该值,但if语句仍然失败。 - Ricardo Sanchez
您的代码应该假定 "fill" 属性看起来像 "#FF00FF",包括井号。 - DanRedux
无论如何,你是否尝试检查fill是什么?比如使用typeof fill来检查一下?你是否尝试过console.log(fill)?结果是什么? - Joseph
fill 的类型为字符串,但 if 失败了。 - Ricardo Sanchez
显示剩余2条评论
3个回答

1

我认为你需要在那里使用两个等号,尝试这个...

var fill = $(this).attr( "fill" );
if ( fill == "#FF00FF" )

如果这样行不通,那么您可能没有正确识别$(this)


"我认为你需要在那里使用2个等号"。不,attr返回一个字符串,所以我们不需要类型强制转换(无论如何,不依赖于类型强制转换通常更好,规则有点复杂)。 - T.J. Crowder
现在正在工作,我想知道如果两者都是字符串类型,那么 === 为什么会失败? - Ricardo Sanchez
@RicardoSanchez: 不应该这样。如果你 console.log(typeof fill) 会发生什么? - T.J. Crowder
我经常遇到这种情况,现在如果值看起来相同但不一定是相同类型的变量,我只依赖于 == 而不是 ===。 - Nickolas Tuttle

1

attr 返回一个字符串,不需要对其调用 toString(并且参数将被忽略,因为 StringtoString 不接受参数)。

你的代码假设了一些事情:

  1. 属性以 #hex 形式返回(如果它是颜色值,则在跨浏览器时不可靠)。

  2. 它将全部大写。

不知道你在记录该值时看到了什么,我只会解决第二部分:

var fill = $(this).attr( "fill" );
if ( fill.toUpperCase() === "#FF00FF" )

0
如果填充是一种颜色,那么它可能以RGB格式返回。当您记录它时,您会写toString()。可以将其与RGB值进行比较,也可以将其与字符串fill.toString(16)进行比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接