繁体   English   中英

javascript中有多少个文字?

[英]How many literals are there in javascript?

我正在从事一个涉及正则表达式的项目,突然遇到了一个regex literal ,如下所示:

/ab+c/g

我知道在编程语言中有一些固定的可能文字,如C语言中的integerfloat等。

然后,我搜索了javascript支持的文字列表,但找不到满意的答案。

我对节点提示符进行了试验,得到了以下有趣的结果:

> typeof /ab+c/g
'object'
> str = 'xyz'
'xyz'
> typeof `abc ${str}`
'string'
> typeof function f(x, y) {
... return x + y;
... }
'function'
> typeof {
... 'a': 'b'
... }
'object'

这证明

  • regex literal本质上是object literal
  • template literal本质上是string literal
  • function literalfunction literal
  • javascript object literalobject literal

尽管最后一个可以并且在许多地方都定义了,但是对我而言,正则表达式文字仍然是object literal并不有意义。

它写在哪里? 如何在javascript中找出可能的文字列表?

看一下规范的附录A,您会找到StringLiteral等的定义。顺便说一句,该规范使用FunctionExpression而不是FunctionLiteral

同样重要的是11.8文字 下面是

  • NullLiteral :: == null
  • BooleanLiteral :: == true | false
  • 数字字面量
  • 正则表达式
  • 字符串字面量
  • TemplateLiteral组件。

值得注意的是, undefined不是文字。

正如该部分所清楚指出的那样,“文字”是指缩写语法,与任何对象/原始区分无关。

在文本的其他地方(第12章PrimaryExpression ),您会看到诸如ObjectLiteralArrayLiteral之类的术语,但它们也被称为{Object,Array} Initializer

您可能会避免过分思考typeof结果。 虽然有时可以用来确定变量具有哪种类型的值,但就您在C或OOP语言中所知的意义而言,它实际上与对象类型并不相同。

观察:

typeof (()=>{})
> "function"
(()=>{}) instanceof Object
> true

也:

typeof ""
> "string"
typeof new String("")
> "object"
"" instanceof String
> false

要回答您的主要问题,有以下文字:

  • ()=>{} lambda文字
    • typeof ()=>{} == "function"
  • function() {}函数文字
    • typeof function() {} == "function"
  • ""字符串文字
    • typeof "" == "string"
  • ``字符串模板文字
    • typeof `` == "string"
  • 42数字文字
    • typeof 42 == "number"
  • /x/ RegExp文字
    • typeof /x/ == "object"
  • []数组文字
    • typeof [] == "object"
  • false布尔文字
    • typeof false == "boolean"
  • null对象的null文字,请注意
    • typeof null == "object"
  • {}和对象文字
    • typeof {} == "object"

在所有这些字符串中,只有字符串文字和数字文字具有value instanceof Object == false 其余的都是对象的实例。

在编写可能接收各种类型的代码时, typeofinstanceof的警告很重要。 通常, typeof逻辑为:

  • 它是原始字符串(不是new String )吗? -返回“字符串”
  • 这是原始数字吗? -返回“数字”
  • 它是原始的布尔值吗? -返回“布尔值”
  • 它是undefined (请注意, null不是未定义的!)-返回“未定义”
  • 是功能吗? -返回“功能”
  • 否则返回“对象”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM