这个JavaScript语法是什么?

时间:2014-07-06 16:12:09

标签: javascript

我是JavaScript新手。以下代码来自某些生产代码库。 regDefinition 以JSON格式传递。但我不太确定方法体中的语法。 特别是||[]部分。

function getCookieValue(regDefinition) {
    return (document.cookie.match(regDefiniation.regEx) || [])[regDefiniation.index] || null;
}

5 个答案:

答案 0 :(得分:31)

看起来有人花了很多精力让这很难读。

如果我解释正确,它会做这样的事情:

  • 调用匹配方法。
  • 它返回一个匹配数组,或者什么都没有(null,undefined?)。如果它没有返回任何内容,则默认为空数组。
  • 在数组中,获取索引为'regDefiniation.index'的元素。
  • 如果该项目不存在(可以是匹配的情况,并且对于空的默认数组将始终如此),则返回null。

答案 1 :(得分:25)

这里有一些好的答案,但似乎没有人真正解释你为什么要这样做

(foo || [])[bar]; // or similarly (foo || {})[bar]

而不仅仅是

foo[bar]

考虑 RegExp 失败的情况,

var foo = null, bar = 0;

现在没有任何特别之处,你会收到一个错误并且代码会停止

foo[bar]; // TypeError: Cannot read property '0' of null

但是括号内容或版本将不同

(foo || [])[bar]; // undefined (note, no error)

这是因为(null || [])的结果是[],您现在可以尝试安全地读取它的属性

答案 2 :(得分:7)

document.cookie是一个字符串,其中包含与当前页面关联的Cookie。 document.cookie.match(regDefiniation.regEx)函数调用正在使用正则表达式搜索此字符串,以获取匹配的子字符串列表。

如果cookie字符串中没有任何内容与正则表达式匹配,则match调用将返回null,因此|| []将使用空数组替换该null。这可以确保表达式(document.cookie.match(regDefiniation.regEx) || [])始终返回一个数组。

[regDefiniation.index]只是从该数组中检索一个元素。但是如果数组中不存在请求的索引 - 例如,如果数组为空,因为正则表达式与cookie字符串中的任何内容都不匹配 - 结果将是undefined,那么{{1}在这种情况下,将结果更改为|| null

答案 3 :(得分:6)

所以要理解这一点,让我们深入研究这个例子

var myValue = someValue || otherValue

所以这里如果someValue可以转换为true,那么myValue将包含someValue,否则它将包含otherValue

// Values that evaluate to false:
false
"" // An empty string.
NaN // JavaScript's "not-a-number" variable.
null
undefined // Be careful -- undefined can be redefined!
0 // The number zero.

其他任何东西都会返回真实

因此,要了解您的代码,请让它破解

var myCookie = document.cookie.match(regDefiniation.regEx) || []

所以这里如果document.cookie.match(regDefiniation.regEx)返回true则返回它,否则返回空数组。 其他部分也一样。有关JavaScript中逻辑运算符的更多信息,请访问以下链接

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

答案 4 :(得分:3)

这是一步一步的步骤:

document.cookie返回一个字符串,并将match方法(内置)应用于该字符串。如果参数在regDefiniation.regEx找到,那么执行此操作返回[](即数组) 在此之后,无论上述步骤返回什么,请将索引应用于[regDefiniation.index]

`如果上述所有步骤都失败,则返回null。