📅  最后修改于: 2023-12-03 15:04:52.964000             🧑  作者: Mango
在Javascript中,有时候可以看到奇怪的表达式。本文将介绍一个例子: RegExp.name[5] (undefined ''[5]) 'x' Number([]);?q=RegExp.name[5] (undefined ''[5]) 'x' Number([]);
。
首先,我们将这个表达式拆成多个部分:
RegExp.name[5]
(undefined ''[5])
'x'
Number([])
?q=RegExp.name[5] (undefined ''[5]) 'x' Number([])
(这个可以理解为添加查询参数)接下来,我们分别解析这些部分。
RegExp.name[5]
RegExp.name
是一个内置对象的静态属性,表示正则表达式对象的名称。因为它是一个字符串,我们可以使用下标访问它的字符。
RegExp.name[5] // "E"
所以RegExp.name[5]
的结果是字母"E"。
(undefined ''[5])
这个表达式是将一个字符串''
的第5个字符转换为undefined,然后将undefined和undefined相加,结果为NaN。
(undefined ''[5]) // NaN
'x'
这部分是一个字符串字面量,它的结果就是"x"。
Number([])
将一个空数组转换为数字类型,结果为0。
Number([]) // 0
?q=RegExp.name[5] (undefined ''[5]) 'x' Number([])
这部分是将前面的表达式以查询参数的形式加到URL中。具体来说,这是一个查询参数为q
、值为RegExp.name[5] (undefined ''[5]) 'x' Number([])
的URL。
通过对这个表达式的解析,我们可以看到Javascript中的一些奇怪的语言特性。即便是一些看起来毫无意义的表达式也有一些拼凑的技巧。这提醒我们在编写代码时要保持谨慎,并且始终牢记代码的可读性和可维护性。