【问题标题】:What is the meaning of "literal" in the phrase object literal notation?短语对象文字符号中的“文字”是什么意思?
【发布时间】:2014-01-08 14:17:50
【问题描述】:

Javascript: The Good Parts 中,Douglas Crockford 写道,Javascript 的一个好主意是“富有表现力的对象文字符号”。我知道他基本上是在称赞JSON

但是这个符号的“字面意思”是什么?是否有其他语言使用“表达对象文字符号”?有没有没有的语言?他到底是什么意思?

【问题讨论】:

  • 文字 {} 与非文字 new Object() 相对。我想。
  • “literal”在这里是一个名词,就像所有语言中的“数字文字”一样。

标签: javascript json


【解决方案1】:

关于“赞美 JSON”:他指定了。

“文字”部分:谷歌搜索“对象文字”提供了两个顶级资源:MDNWikipedia。引用后者:

在计算机科学中,literal 是一种表示源代码中固定值的符号。几乎所有编程语言都有原子值的表示法,例如整数、浮点数和字符串,通常用于布尔值和字符;有些还具有枚举类型元素和复合值(如数组、记录和对象)的符号。

基本上,所有使用导致定义类型的语法结构都可以称为文字。 (例如,字符串文字,"abc"。)这是一个技术术语,表示以这种或那种方式“从字面上”写一些东西会导致一个确定类型的变量独占(与构造相反,看起来像别的东西,比如 PHP 中的 array())。

【讨论】:

  • 例如,在静态类型语言中,字符串变量是可以保存字符串的变量。字符串文字填充字符串变量。在 javascript 中,对象可以表示为文字——就像我的示例中的字符串文字一样。是这个主意吗?
  • 我喜欢这个答案。非常干净,专注于问题。投我一票。
  • @akh2103 基本上是的。听起来不错。你不需要实例化任何类来获得foo 类型的东西,但可以直接输入,就像字符串和布尔值一样。在 Python 中,再举一个例子,您可以使用my_dict = dict()(非文字)或my_dict = {}(文字概念)来获取my_dict 类型的变量dict
【解决方案2】:

嗯,在一般编程中,字面量是一个固定值。 就像说var five = 5; 并在某些数学中使用“五”一样,只需按字面意思使用数字 5。

所以在 OOP 语言中,对象字面量应该是这样的:

var new_dog = {
    name: "doggy",
    good_dog: false
};

整个事情都是我的对象。我的 {} 之间的东西是我的文字。我的符号是一个模式“名称:值”。

【讨论】:

  • 你为什么把它变成一只坏狗? :(
【解决方案3】:

作为一个刚接触编程的人,我真的很纠结文字的概念。解释通常假设您已经了解所有关于类型和构造函数的知识。所以这是我(过度)简化的看法:

“类型”是指变量的分类(不同类型的变量可以做不同的事情)。​谈论原始类型文字很常见,例如字符串、数字和布尔值。这是一个字符串文字示例:

let myStr = 'word'; 

在这种情况下,word 是字符串文字;您已经创建了字面上属于字符串类型的东西。

在 JS 中你也可以有对象字面量。也就是说,你可以在花括号之间输入这个东西,它会自动成为对象类型的东西。

let mylitteralObject = {};

我们创建了一个没有使用运算符的对象(运算符本质上是一个使用熟悉语法的内置函数,例如“+”)。 JS 引擎查看花括号并确定您正在声明一个对象。

一种非文字方式是使用对象构造函数 - 一个与 new 关键字组合的函数来创建一个新对象。 ​

let myConstructedObject =  new Object();

这里新的关键字被视为operator。因此,myConstructedObject 中的数据是表达式求值的结果。

【讨论】:

    【解决方案4】:

    对象字面量是用大括号括起来的名称值对的逗号分隔列表。在 JavaScript 中,对象字面量定义如下:

    var someObject = {
        some_prop: 'some string value',
        another_prop: 'another string value',
        int_prop: 100
    };
    

    它是“平坦的”。您创建它,向它添加属性和方法,所有这些属性和方法都是 public 。 对象字面量使用以下语法规则形成:

    • 冒号分隔属性名称和值。
    • 逗号将每个名称/值对与下一个分隔开。
    • 最后一个名称/值对之后可能没有逗号,但在这种情况下,9 版之前的 Internet Explorer 通常会触发错误:“预期的标识符、字符串或数字”。

    值可以是任何数据类型,包括数组字面量、函数和嵌套对象字面量。

    虽然 JavaScript 对象字面量和 JavaScript 实例对象都是对象,但它们的本质和特性不同

    【讨论】:

    • 您答案的第三个要点不准确。最后一对逗号在 JavaScript 中是允许的(参见section 11.1.5 of the specification),但在 ECMAScript 3 中不允许。IE 8 是一个古老的浏览器,于 2009 年 3 月发布,而 ES 5.0 于 2009 年 12 月发布。所以,当 IE8 发布时,它确实符合(当时)最新规范(ES3),因此它没有尾随逗号。 IE8 是 XP 上支持的最新 IE 版本(尽管已接近 EOL,但仍然很流行),因此省略逗号的建议仍然有效。
    【解决方案5】:

    我自己也一直在为此苦苦挣扎。虽然我发现上面的答案很有帮助,但我在Webopedia 中找到了literal 的简单定义:

    在编程中,写出的值完全按照它的意图被解释。相反,变量是一个名称,可以在程序执行过程中表示不同的值。常量是在整个程序中代表相同值的名称。但字面量不是名称——它是值本身。

    文字可以是数字、字符或字符串。例如,在表达式中,

    x = 3

    x 是一个变量,3 是一个字面量。

    真正让我印象深刻的是

    但文字不是名称——它是值本身。

    另外,这个StackOverflow post 也很有帮助。我很欣赏这条评论:

    基本上代表程序中的值的代码,而不是对程序执行具有特殊意义的代码。例如:15 在程序 vs + 中字面意思是 15,具有“将两个东西加在一起”的特殊含义。您不会将 + 视为表示加号本身,因为它不是文字。

    这个答案很有帮助:

    快速示例:

    int my_int_var = 723;

    723 - 这组字符指的是一个文字整数值。

    my_int_var - 这组字符指的是一个变量整数值。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多