[英]How many literals are there in javascript?
我正在從事一個涉及正則表達式的項目,突然遇到了一個regex literal
,如下所示:
/ab+c/g
我知道在編程語言中有一些固定的可能文字,如C語言中的integer
, float
等。
然后,我搜索了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 literal
是function literal
javascript object literal
是object literal
盡管最后一個可以並且在許多地方都定義了,但是對我而言,正則表達式文字仍然是object literal
並不有意義。
它寫在哪里? 如何在javascript中找出可能的文字列表?
看一下規范的附錄A,您會找到StringLiteral等的定義。順便說一句,該規范使用FunctionExpression而不是FunctionLiteral 。
同樣重要的是11.8文字 。 下面是
null
true
| false
值得注意的是, undefined
不是文字。
正如該部分所清楚指出的那樣,“文字”是指縮寫語法,與任何對象/原始區分無關。
在文本的其他地方(第12章PrimaryExpression ),您會看到諸如ObjectLiteral和ArrayLiteral之類的術語,但它們也被稱為{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
。 其余的都是對象的實例。
在編寫可能接收各種類型的代碼時, typeof
和instanceof
的警告很重要。 通常, typeof
邏輯為:
new String
)嗎? -返回“字符串” undefined
(請注意, null
不是未定義的!)-返回“未定義”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.