【问题标题】:Using a ternary operator to set a variable使用三元运算符设置变量
【发布时间】:2012-07-21 04:29:51
【问题描述】:

我正在尝试使用三元运算符来检查 XML 元素的值是否为空。如果是,那么我希望变量是一回事。如果不是,那么我希望它返回元素的值。这就是我到目前为止所拥有的。

var rating = data.getElementsByTagName("overall_average")[0].childeNodes[0].length > 0 ? data.getElementsByTagName("overall_average")[0].childeNodes[0].nodeValue : "It is empty";

【问题讨论】:

    标签: javascript xml


    【解决方案1】:

    这里:

    var node = data.getElementsByTagName( 'overall_average' )[0].childNodes[0];
    var rating = node ? node.nodeValue : 'It is empty';
    

    请注意,如果data 中没有单个“overall_average”元素,则此代码会引发(错误),因此您可能需要在必要时防范这种情况...

    【讨论】:

    • 它继续抛出 NaN 作为 rating 的值。
    • 我不明白它为什么会那样做。我们只是引用一个节点并访问它的nodeValue。我建议设置断点并检查 node 是否确实是节点引用...
    • 谢谢。我就是这么做的。有一个插件试图对评级变量进行四舍五入。将我的代码移动到一个匿名函数中,这就成功了。但是,为了将来参考,您知道如何检查变量是否为数字并根据结果吐出一些东西吗?我希望它再次出现在三元运算符中。
    • @GregWiley 您可以使用前缀+ 运算符将值强制为数字值,然后检查结果是否为NaN 以外的数字:var result = !isNaN( +value ) ? +value : 0;(此处为0是后备值)。
    【解决方案2】:

    最短路径:

    var rating = (data.getElementsByTagName('overall_average')[0].childNodes[0] || {}).nodeValue || 'It is empty';
    

    【讨论】:

    • @mplungjan,在我的示例中,我使用 || 运算符来检查 null。所以,如果你有这样的东西:var x = null || {}; 那么 x 将是一个空的object 而不是null。您也可以将|| 用于属性:var x = {}.someProp || 'hello';,x 将是'hello'
    • 谢谢!你能解释一下我将如何检查这个相同的变量是否是三元运算符中的数字吗?
    • @Greg Wiley,不幸的是,|| 只能帮助您检测 null/undefined 对象。在数字检测的情况下,您需要使用通常的三元运算符:isNaN('bla-bla') ? 'not a number' : 'a valid number'
    【解决方案3】:

    你的三元运算在我看来很好。我建议的一件事(为了可读性和简洁性)是将您的 overall_average 对象定义为变量并在之后引用它。

    var overall_average = data.getElementsByTagName("overall_average")[0].childeNodes[0];
    var rating = overall_average.length > 0 ? overall_average.nodeValue : "It is empty";
    

    祝你好运!

    【讨论】:

    • 谢谢。这是有道理的,但感觉我正在遍历一个元素列表,这将是我试图设置的每个变量两行。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多