[英]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.