字面量,原文为literals,通俗一点就是用来为变量赋值时的常数量,比如 var i=1 ,其中1 就是一个“字面量”。JavaScript中支持多种类型的字面量,本节介绍下面几种字面量类型:
数组字面量
数组字面量是一个包含有零个或多个表达式的列表,其中每个表达式代表一个数组的元素,该字面量以方括号对([])封闭。当你使用数组字面量生成一个数组时,该数组将会以给定的参数值作为它的元素进行初始化,而其长度由参数的数量决定。
下面的示例用3个元素生成数组coffees
,它的长度是3。
var coffees = ["French Roast", "Colombian", "Kona"];
注意 这里的数组字面量是对象初始化器的一种。参考对象初始化器的使用。
若在顶层脚本里用字面量生成数组,JavaScript语言会在每次包含该数组字面量的表达式执行时,解释一次该矩阵。另一方面,在函数中使用的矩阵,将在每次函数被调用时,相应被生成一次。
数组字面量同时也是数组对象。有关数组对象的详情请参考数组对象一文。
数组字面量中的额外的逗号
你不必列举数组字面量中的所有元素。若你在同一行中连写两个逗号(,),数组中就会产生一个“未定义”的元素,其初始值是undefined
。以下示例生成了一个名为fish
的矩阵:
var fish = ["Lion", , "Angel"];
这个数组中,有两个已被赋值的元素,和一个空元素(fish[0]是”Lion”,fish[1]是undefined,而fish[2]是”Angel”;译注:此时矩阵的长度属性fish.length是3)。
若你在元素列表的尾部添加了一个逗号(,),它会被忽略。在下面的例子中,该矩阵的长度是3。并不存在myList[3]这个元素,元素列表中所有其它的逗号都表示一个新元素(的开始)。
var myList = [ , 'home', , 'school'];
在下面的例子中,数组的长度是4,元素myList[0]和myList[2]缺失(译注:没被赋值,因而是undefined)。
var myList = [ , 'home', , 'school'];
又一个例子,在这里该数组的长度是4,元素myList[1]和myList[3]被漏掉了。(但是)只有最后的那个逗号被忽略。
var myList = [ , 'home', , 'school'];
理解多余的逗号(在脚本运行时会被如何处理)的行为,对作为语言来理解JavaScript十分重要,不管怎样,在你自己写代码时:明确的声明缺失的变量为undefined,将大大增加你的代码的清晰度和可维护性。
布尔字面量
布尔量有两种语式值:true
和false。
不要把JavaScript定义的基本数据类型中的布尔类型值true,false 和布尔对象的True和False相混淆,布尔对象类型为基本布尔数据的一个对象封装。对照其它语言比如Java 就是 bool数据类型 和 Boolean 对象类型。
整数
整数可以被表示成十进制(基数为10)、十六进制(基数为16)以及八进制(基数为8)。
- 十进制整数字组成的数字序列,不带前导0(零)。
- 前导0(零)的整数文字表明它是八进制。八进制整数只能包括数字0-7。
- 前缀0x或0X表示十六进制。十六进制整数,可以包含数字(0-9)和字母a~f或A~F。
八进制整数字面量在ECMA-262,版本3标准(严格模式下) 中被弃用并被移除。不过JavaScript 1.5为了后向兼容仍然支持。
整数字面量例子如下:
0, 117 and -345 (decimal, base 10)
015, 0001 and -077 (octal, base 8) 0x1123, 0x00111 and -0xF1A7 (hexadecimal, "hex" or base 16)
浮点字面量
浮点字面量可以有以下的组成部分:
- 一个十进制整数,它可以带符号(即前面的“+”或“ – ”号),
- 一个小数点(“.”),
- 一个小数部分(由一串十进制数表示),
- 一个指数部分。
指数部分是以“e”或“E”开头后面跟着一个整数,可以有正负号(即前面写“+”或“-”)。一个浮点数语式量必须至少由一位数字、小数点或者“e”(大写“E”也可)组成。
一些浮点数字面量的例子,如3.1415,-3.1E13,.1e12以及2E-12。
简言之,其语法是:
[digits][.digits][(E|e)[(+|-)]digits]
例如:
3.14 2345.789 .3333333333333333333
对象字面量
对象字面量是包含有一个对象的零个或多个属性名值对的(元素)列表,其中每个名值对由一个属性名和一个相应的属性值构成,该字面量以花括号对({})封 闭。你不能在一段语句的开头就使用对象字面量。因为此时左花括号({)会被认为是一个块的起始符号,这将导致一个程序错误或非你所预想的行为。
以下是一个对象字面量的例子。对象car
的第一个元素(译注:即一个属性双值对)定义了属性myCar
;第二个元素,属性getCar
,引用了一个函数(即CarTypes("Honda"))
;第三个元素,属性special
,使用了一个已有的变量(即Sales
)。
var Sales = "Toyota"; function CarTypes(name) { return (name == "Honda") ? name : "Sorry, we don't sell " + name + "." ; } var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales }; console.log(car.myCar); // Saturn console.log(car.getCar); // Honda console.log(car.special); // Toyota
更进一步的,你可以使用数字或字符串语式量作为属性的名字,或者在另一个字面量内嵌套上一个字面量。如下的示例中使用了这些可选项。
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; console.log(car.manyCars.b); // Jeep console.log(car[7]); // Mazda
要注意的是:
var foo = {a: "alpha", 2: "two"}; console.log(foo.a); // alpha console.log(foo[2]); // two //console.log(foo.2); // Error: missing ) after argument list //console.log(foo[a]); // Error: a is not defined console.log(foo["a"]); // alpha console.log(foo["2"]); // two
字符串字面量
字符串字面量可以包含有零个或多个字符,由双引号(”)对或单引号(”)对包围。字符串被限定在同种引号之间;也即,必须是成对单引号或成对双引号。下面的例子都是字符串字面量:
"foo"
'bar'
"1234"
"one line \n another line"
"John's cat"
你可以在字符串字面量上使用字符串对象的所有方法,过程其实是这样的:JavaScript会自动将字符串字面量暂时的变换为字符串对象,调用该方法,然后废弃掉那个临时的字符串变量。你也能用对字符串语式量使用类似String.length
的属性:
"John's cat".length
你应当一直使用字符串字面量,除非你有特别的需求,要用到字符串对象。要查看字符串对象
的有关细节,请阅读字符串对象一文
在字符串中使用的特殊字符
作为一般字符的扩展,你可以在字符串中使用特殊字符,如下例所示。
"one line \n another line"
Character | Meaning |
---|---|
\b |
Backspace |
\f |
Form feed |
\n |
New line |
\r |
Carriage return |
\t |
Tab |
\v |
Vertical tab |
\' |
Apostrophe or single quote |
\" |
Double quote |
\\ |
Backslash character (\). |
\XXX |
The character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, \251 is the octal sequence for the copyright symbol. |
\xXX |
The character with the Latin-1 encoding specified by the two hexadecimal digits XX between 00 and FF. For example, \xA9 is the hexadecimal sequence for the copyright symbol. |
\uXXXX |
The Unicode character specified by the four hexadecimal digits XXXX. For example, \u00A9 is the Unicode sequence for the copyright symbol. See Unicode escape sequences. |
Unicode编码
Unicode是一种通用字符编码标准的主要书面语言的交换和显示。它涵盖的语言,美洲,欧洲,中东,非洲,印度,亚洲和环太平洋,以及历史悠久的脚本和技术符号。 Unicode允许的多语言文本的交换,处理和显示,以及使用通用的技术和数学符号。它希望多语言计算,如不同的民族性格的标准,以解决国际化问题。但是,并非所有的现代或古老的语言书写体目前都支持。
Unicode字符集,可用于所有已知的编码。 Unicode是仿照ASCII(美国信息交换标准码)字符集。它使用一个数值,每个字符的名称。字符编码指定的字符和数值(代码位置),以及表示这个值位的身份。 16位的数字值(代码值)被定义为一个十六进制数,例如,前缀U,U +0041代表A.唯一的名称,这个值是拉丁大写字母A。
注意:早于JavaScript 1.3之前的版本并不支持Unicode编码。
兼容于ASCII和ISO标准的Unicode编码
Unicode编码完整兼容于ISO 10646国际标准的子集ISO/IEC 10646-1; 1993。
几种编码标准(包括UTF-8,UTF-16和ISO UCS-2)在物理上将Unicode表示为实际比特值(二进制值)。
Unicode编码的UTF-8与ASCII字符是兼容,并支持许多程序。前128个Unicode字符对应的ASCII字符,并具有相同的字节值。相当于从0x20到0x7E的ASCII字符的Unicode字符U +0020至U +007 E。支持拉丁字母,并使用7位字符集,与ASCII,UTF-8之间使用一个和第四个字节为每个字符(“字节”,这意味着一个字节,或8位)。这使得数百万个字符。另一种编码标准,UTF-16,使用两个字节来表示Unicode字符。转义序列允许UTF-16,代表整个Unicode范围由4个八位位组。 ISO UCS-2(通用字符集)使用两个字节。
JavaScript和浏览器对UTF-8/Unicode的支持,意味着你可以使用非拉丁,国际化,本地化的字符,再加上特殊的技术符号,在JavaScript程序。 Unicode提供了一种标准的方式来编码多语言文本。由于UTF-8的Unicode编码与ASCII兼容,程序可以使用ASCII字符。您可以使用非ASCII Unicode的字符的意见,字符串文字,标识,和正则表达式的JavaScript。
Unicode转义序列
你可以使用Unicode转义序列的字符串常量,正则表达式和标识符。转义序列由6个ASCII字符:\u和一个4位十六进制数字。例如,\u00A9表示版权符号。每一个Unicode转义序列,在JavaScript中被解释为一个字符。
下面的代码返回一个版权符号和字符串“Netscape Communications”。
var x = "\u00A9 Netscape Communications";
下表列出了常用特殊字符的Unicode值。
Category | Unicode value | Name | Format name |
---|---|---|---|
White space values | \u0009 | Tab | <TAB> |
\u000B | Vertical Tab | <VT> | |
\u000C | Form Feed | <FF> | |
\u0020 | Space | <SP> | |
Line terminator values | \u000A | Line Feed | <LF> |
\u000D | Carriage Return | <CR> | |
Additional Unicode escape sequence values | \u0008 | Backspace | <BS> |
\u0009 | Horizontal Tab | <HT> | |
\u0022 | Double Quote | “ | |
\u0027 | Single Quote | ‘ | |
\u005C | Backslash | \ |
从Java的JavaScript使用Unicode转义序列是不同的。在JavaScript中,转义序列是永远不会理解为一个特殊字符,第一个。例如,在一个字符串的行结束符转义序列不终止字符串,它被解释的功能。使用Javascript忽略任何转义序列,如果在评论中使用。在Java中,如果使用转义序列在一个单一的注释行,它被解释为一个Unicode字符。对于一个字符串字面量,Java编译器解释的转义序列的第一个。例如,如果一个行结束符转义字符(例如,\u000A),在Java中使用,它终止字符串文字。在Java中,这将导致一个错误,因为行结束符中不允许使用字符串文字。您必须使用\n换行的字符串文字。在JavaScript中,转义序列的工作方式相同的\n。
JavaScript文件中的Unicode字符
早期的Gecko默认使用Latin-1字符作为从XUL文件加载的JavaScript代码文件的编码。在Gecko 1.8之后,则根据XUL文件的编码来推断。请参考在XUL JavaScript中使用国际字符一文内的更多信息。
用Unicode编码显示字符
您可以使用Unicode的字符显示在不同的语言或技术符号。对于字符才能正确显示,如Mozilla Firefox或Netscape客户端需要支持Unicode。此外,适当的Unicode字体必须是提供给客户端,客户端平台必须支持Unicode。通常情况下,Unicode字体不会显示所有的Unicode字符。一些平台,如Windows 95,提供对Unicode的部分支持。
要接收非ASCII字符的输入,客户端需要发送的输入为Unicode。使用标准的增强型键盘,客户端可以很容易地输入Unicode支持的字符。有时,只有这样,才能输入Unicode字符使用Unicode转义序列。
更多关于Unicode的信息,请到Unicode Home Page查阅Unicode标准2.0版,Addison-Wesley出版社,1996年出版。
外部参考资源
- 在JavaScript中转义和非转义文本——用来转换JavaScript unicode字符的一个JS页面应用