簡體   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