Javascript 将某物解析为对象文字而不是块有什么区别?
对不起,我对JavaScript的基本概念一无所知 归结起来就是: 文字-直接在脚本中找到的值。示例: 表达式-组合的一组标记,通常为文字或标识符 使用可计算为特定值的运算符。示例: 在Javascript中,上述两种语言有着非常明显的区别 我碰巧读到了这个。我很熟悉函数声明和函数表达式之间的区别,以及何时使用一种方法而不是另一种方法 同一条: …您可能还记得,在使用eval评估JSON时,字符串 通常用括号-eval(“(“+json+”)”包装)。这是 当然,这样做的原因是相同的——分组运算符 括号是,强制将JSON括号解析为表达式 而不是作为一个块: 那么,将某个对象解析为Javascript 将某物解析为对象文字而不是块有什么区别?,javascript,Javascript,对不起,我对JavaScript的基本概念一无所知 归结起来就是: 文字-直接在脚本中找到的值。示例: 表达式-组合的一组标记,通常为文字或标识符 使用可计算为特定值的运算符。示例: 在Javascript中,上述两种语言有着非常明显的区别 我碰巧读到了这个。我很熟悉函数声明和函数表达式之间的区别,以及何时使用一种方法而不是另一种方法 同一条: …您可能还记得,在使用eval评估JSON时,字符串 通常用括号-eval(“(“+json+”)”包装)。这是 当然,这样做的原因是相同的——分组运算
对象文本
与将其解析为块
有什么区别呢
<> p> >在代码< >解析> <代码> > 第一,不要<代码> EVA/COS> JSON,在字符串源上使用<代码> jSON.PARSE <代码> >
块是一个“表达式组”,例如
let x = 0;
if (true) {
// this is a block
++x;
}
然而,这同样也是一个障碍
let x = 0;
{ // hi there, I'm a block!
++x;
}
这意味着,当解释器看到块表示法时,即使您这样做,它也会假定一个块
{ // this is treated as a block
foo: ++x
}
在这里,foo
充当一个标签而不是属性名,如果您尝试使用尝试的对象文本执行更复杂的操作,您将得到一个语法错误
当您想要像这样含糊不清地编写对象文本时,解决方案是通过提供括号显式地强制解释器进入“表达式模式”
({ // this is definately an Object literal
foo: ++x
})
首先,不要
eval
JSON,对字符串源代码使用JSON.parse
块是一个“表达式组”,例如
let x = 0;
if (true) {
// this is a block
++x;
}
然而,这同样也是一个障碍
let x = 0;
{ // hi there, I'm a block!
++x;
}
这意味着,当解释器看到块表示法时,即使您这样做,它也会假定一个块
{ // this is treated as a block
foo: ++x
}
在这里,foo
充当一个标签而不是属性名,如果您尝试使用尝试的对象文本执行更复杂的操作,您将得到一个语法错误
当您想要像这样含糊不清地编写对象文本时,解决方案是通过提供括号显式地强制解释器进入“表达式模式”
({ // this is definately an Object literal
foo: ++x
})
以
{
开头并以}
结尾的组视为对象文字或块,具体取决于上下文*
在表达式上下文中,组被解释为对象文本。在表达式上下文中写入块将生成语法错误:
// Valid code:
foo = {a:b};
({a:b});
// Syntax errors:
foo = {var a = b};
({var a = b});
在表达式上下文之外,该组被解释为块。根据代码的具体编写方式,在表达式上下文之外编写的对象文字要么是语法错误,要么将被解释为标签
*注意:在ECMAscript规范中,“上下文”一词用于表示特定的内容。我在这里使用的这个词在计算机科学中具有解析的一般含义。一个以
{
开头并以}
结尾的组被视为对象文字或块,具体取决于上下文*
在表达式上下文中,组被解释为对象文本。在表达式上下文中写入块将生成语法错误:
// Valid code:
foo = {a:b};
({a:b});
// Syntax errors:
foo = {var a = b};
({var a = b});
在表达式上下文之外,该组被解释为块。根据代码的具体编写方式,在表达式上下文之外编写的对象文字要么是语法错误,要么将被解释为标签
*注意:在ECMAscript规范中,“上下文”一词用于表示特定的内容。我在这里使用的这个词在计算机科学中具有解析的一般意义。块是一种语句,既不是表达式,也不是字面意义。您还需要查找:-)块是一种语句,既不是表达式也不是文字。你也要查一下:-)对不起我的无知。这里的标签是什么意思?[将被解释为标签]?标签是一种类似于标识符的东西,可用于
break
和continue
语句中etc@ShirgillFarhanAnsari: . 如果阅读文档,您会注意到标签的语法与object literal中的对象键类似。因此,包含标签的块可能看起来像简单的对象文字。@ShirgillFarhanAnsari:FWIW,标签是从汇编语言继承的语言功能抱歉,我不知道。这里的标签是什么意思?[将被解释为标签]?标签是一种类似于标识符的东西,可用于break
和continue
语句中etc@ShirgillFarhanAnsari: . 如果阅读文档,您会注意到标签的语法与object literal中的对象键类似。因此,包含标签的块可能看起来像简单的对象文字。@ShirgillFarhanAnsari:FWIW,标签是从汇编语言继承的语言功能