var so = {name: 'stack'}['overflow'];
undefined
Run Code Online (Sandbox Code Playgroud)
这个表达到底在做什么?控制台既不会产生任何错误也不会so包含任何数据.
UPDATE
{name: 'stack'}['overflow']控制台就会打印出来["overflow"]{name: 'stack', location: 'somewhere'}['overflow']给出了错误Uncaught SyntaxError: Unexpected token :(…){name: 'stack'}被称为对象文字,它有一个被调用的属性name,其对应的值是stack.
{name: 'stack'}['overflow']试图overflow从对象文字中获取属性的值.
由于该对象中没有该属性,因此默认情况下undefined会返回该属性并将其存储在该变量中so.
在控制台中
{name: 'stack'}被视为一个块,name:被视为标签声明.由于该块内部没有任何事情发生,它只是['overflow']按原样返回.
如果您希望将其作为单个表达式进行求值,则需要将其包含在括号中,如下所示
({name: 'stack'}['overflow'])
// undefined
Run Code Online (Sandbox Code Playgroud)在第二种情况下,它在块中看到一个标签name:,然后它看到'stack', location: 'somewhere',这是JavaScript引擎无法解析的.这就是你得到错误的原因.同样,将表达式包装在括号中以获取实际值,如下所示
({name: 'stack', location: 'somewhere'}['overflow'])
// undefined
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |