文本解析函数中与Javascript三元运算符的混淆

时间:2014-11-15 16:36:58

标签: javascript conditional-statements ternary-operator

我对findAndReplace函数中的以下代码段感到困惑:

var regex = typeof searchText === 'string' ?
            new RegExp(searchText, 'g') : searchText,
       childNodes = (searchNode || document.body).childNodes,
       cnLength = childNodes.length,
       excludes = 'html,head,style,title,link,meta,script,object,iframe';

我认为三元运算符暗示如果searchText是一个字符串,那么就创建了regexp对象。但是,无论childNodes的类型是什么,似乎都设置了变量cnLengthexcludessearchText

我想我可能只是对语法很困惑 - 但是条件语句的第3到第5行还是分开?如果它们是分开的,为什么第2行末尾没有分号?

1 个答案:

答案 0 :(得分:2)

第3行到第5行不是条件三元运算符的一部分。逗号用于声明单独的变量,彼此不相关。以下是有效的语法:

var a = 1, b = 2, c = "apples";

在这种情况下,'string' ? new RegExp(searchText, 'g') : searchText被分配给第一个变量regex。其他变量同样分配了自己的表达式。