请问if (element === ''+element) 这个判断有什么意义吗

function getStyle(element, styleProp) {
    if (element === ''+element) element = document.getElementById(element);
    return element.currentStyle ? element.currentStyle[styleProp] :
           getComputedStyle(x,null).getPropertyValue(styleProp);
}

在stackoverflow一个问题中看到的一段代码,想请教下大佬们if (element === ''+element)这个判断有什么意义吗

阅读 2.1k
3 个回答

肯定是有意义的!把代码稍微整理下,看着清晰点。

function getStyle(element, styleProp) {
    if (element === ''+element) {
        element = document.getElementById(element)
    }
    return element.currentStyle ? element.currentStyle[styleProp] :
           getComputedStyle(x,null).getPropertyValue(styleProp);
}

来分析一下:

return element.currentStyle ? element.currentStyle[styleProp] :
           getComputedStyle(x,null).getPropertyValue(styleProp);

这句代码你能推测出来,此处的element是一个对象。继续往前查,element是外部传进来的。

if (element === ''+element) {
    element = document.getElementById(element)
}

这个判断的字面操作,把element转换成字符串,看是否与原element相等。相等的情况下,也就是说element是一个html元素的id,用这个id获取html元素并重新赋值给element变量。如果不相等,则element为html元素,直接获取该元素上的样式。

推测上,这么写的用意应该是调用此方法时传进来的参数不固定,有的时候是html元素,有的时候是html元素的id。关键在于js类型转换,看下测试代码,很明显answer-question和[object HTMLHeadingElement]这两个字符串是不相等的。
image.png

任何对象跟一个字符串做“加法”,如果前者是 string 则直接拼接,如果前者不是 string 则先 toString() 再拼接。

只有字符串对象跟一个空字符串相加后,还等于这个字符串本身。所以可以用来判断是否是字符串类型(其实直接 typeof 就行……)。

你这里的代码显然 element 既可以传入一个 DOM 对象,又可以传入一个 ID 选择器。

应该是判断element是不是字符串

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题