7.字面量 - JS

字面量

字面量,就是按字面意思给出的具体的、固定的值。

在 JS 中可以表示出字面量的数据至少包括,原始类型数据(7种)和部分引用类型数据(数组、正则、自定义对象等)。

原始类型数据的字面量

数、大整数

  1. JS 中的常规数字以 64 位的 IEEE-754 格式进行存储,称为“双精度浮点数”;
  2. BigInt 用于表示任意长度的整数,常规整数取值范围在 -(253-1) 到 (253-1)。
整数、浮点数
  1. 关于数的字面量,整数的字面量可以用十进制二进制八进制以及十六进制表示:
  • 十进制整数字面量由一串数字序列组成,不以 0 开头(没有前缀 0);
  • 二进制整数以 0b/0B 开头,只能包含数字 0 和 1;
  • 八进制的整数以 0/0o/0O 开头,只能包括数字 0-7;
  • 十六进制整数以 0x/0X 开头,可以包含数字(0-9)和字母 a~f / A~F。
11		// 11 - 10进制
011		// 9 - 8进制
0o11	// 9 - 8进制
0b11	// 3 - 2进制
0x11	// 17 - 16进制
0X1e	// 30 - 16进制
  1. 一般的,浮点数的字面量的语法是 [ ( + ∣ − ) ] [ d i g i t s 1 ] [ . d i g i t s 2 ] [ ( E ∣ e ) [ ( + ∣ − ) ] d i g i t s 3 ] [(+|-)][digits1][.digits2][(E|e)[(+|-)]digits3] [(+)][digits1][.digits2][(Ee)[(+)]digits3],也就是四部分:
  • 符号部分 [ ( + ∣ − ) ] [(+|-)] [(+)]:正负号(+/-),当作一元运算符;
  • 整数部分 [ d i g i t s 1 ] [digits1] [digits1]:一个常规十进制数;
  • 小数部分 [ . d i g i t s 2 ] [.digits2] [.digits2]:使用小数点 . 衔接一个十进制数;
  • 指数部分 [ ( E ∣ e ) [ ( + ∣ − ) ] d i g i t s 3 ] ] [(E|e)[(+|-)]digits3]] [(Ee)[(+)]digits3]]:使用 E/e 衔接一个正 / 负十进制数,表示 10的正/负次幂

小数部分可以单独成立,也可以只和符号部分或指数部分整合。

.12			// 0.12
-.12		// -0.12
.12e-2		// 0.0012
.12e1		// 1.2
大整数

大整数(BigInt)是特殊的数字类型,允许表达任意长度整数。创建方式有两种:

  • 在一个整数字面量后面加 n
  • 调用 BigInt() 函数,传入字符串、数字等中生成大整数 。
123456789012345678901234567890n
10n				// 10n
BigInt(10)		// 10n
使用下划线 _ 连接的数

现在的 JS 中,允许使用下划线对数的字面量进行分段书写,使得更加直观地看出数的结构。

100_0000		// 1百万
1_000_000		// 1百万
1_000e-3		// 1

字符串

字符串字面量是由双引号对("")、单引号对('')或者反引号对(``)包围起来的零个或多个字符。由反引号对(``)表示的字符串字面量也就是模板字面量

转义字符
  1. 转义字符的意义是表示一些特殊字符,如换行、制表符、16进制数等等;
  2. 反斜线 \ 的在这里含义是转义,需要转义才能表示反斜线本身;
  3. 在字符串字面量中,引号也需要通过转义表示本身。
字符意思
\0Null 字节
\b退格符
\f换页符
\n换行符
\r回车符
\tTab (制表符)
\v垂直制表符
\'单引号
\"双引号
\\反斜杠字符(\)
\X\XX\XXX\0 ~ \377)一到三位八进制数表示的 Latin-1 字符。十进制范围 0 ~ 255,例如,\251 是版权符号©。
\xXX\x00 ~ \xFF)两位十六进制数字表示的 Latin-1 字符。十进制范围 0 ~ 255,例如,\xA9 是版权符号©。
\uXXXX\u0000 ~ \uFFFF)四位十六进制数字表示的 Unicode 字符。例如,\ u00A9 是版权符号© 。
\u{XXXXX}Unicode 代码点 (code point) 转义字符。例如,\u{2F804} 相当于 Unicode 转义字符 \uD87E\uDC04 的简写。

使用转义,可以使得长句子进行多行书写,在行末加上 \ 表示书写换行了。

let str = '\
\
在行末加上反斜线,然后换行,\
一行中没有内容,也要加上反斜线,\
这是一个长句子。\
\
'

str		// 在行末加上反斜线,然后换行,一行中没有内容,也要加上反斜线,这是一个长句子。
模板字符串字面量

模板字面量是用反引号对(``)包围起来的字面量。

  1. 允许字符串多行内容一起书写(以往需要使用 \n\ 转义);
let sentence = `山上有座庙,
庙里有个老和尚,
。。。
`
/* \n 代表内容换行了,再加上 \ 表示书写换行了 */
let sentence2 = '山上有座庙,\n\
庙里有个老和尚,\n\
。。。\n\
'
  1. 嵌入表达式:模板字符串则可以通过占位符 ${表达式} 嵌入表达式的值(以往可以使用 + 拼接完成字符串插值);
let name = '旺财'
let str = `我的狗名字叫做${name},我上个月刚领养的。`
let str2 = '我的狗名字叫做' + name + ',我上个月刚领养的。'
  1. 一种叫带标签的模板的特殊结构。

注意:

  • 使用反引号对 `` 的字符串,反引号以及占位符需要转义才能表示本身;
  • 有占位时,必须要传入表达式。

布尔值

布尔类型有两种字面量:truefalse

null、undefined

  1. null 的字面量就是 null,大小写敏感;
  2. undefined 的字面量就是 undefined,大小写敏感。

symbol

symbol 值用来表示唯一标识符,通过调用 Symbol 函数进行创建(不是构造器,所以归纳为字面量)。Symbol() 可以传入任意参数,不同的参数有意外的结果,例子如下:

Symbol(11)			// Symbol(11)
Symbol(1.1)			// Symbol(1.1)
Symbol('ID')		// Symbol(ID)
Symbol(false)		// Symbol(false)
Symbol(null)		// Symbol(null)
Symbol(undefined)	// Symbol()		相当于没有传参
Symbol([])			// Symbol()		 相当于 Symbol([].join())
Symbol([1, 2, 3])	// Symbol(1,2,3) 相当于 Symbol([1, 2, 3].join())
let o = {}
Symbol(o)			// Symbol([object Object])	相当于 Symbol(o.toString())
Symbol({a:1})		// Symbol([object Object])
function f() {}
Symbol(f)			// Symbol(function f() {})	相当于 Symbol(f.toString())
Symbol(()=>{})		// Symbol(()=>{})

引用类型数据的字面量

也就是对象的字面量,特殊的对象包括数组、正则表达式等以及自定义对象都有字面量。

数组

数组是一个索引为数字、包含 length 属性、原型为 Array(0) 的对象:

  1. 数组字面量:使用方括号对([])包围、逗号(,)连接的、包含有零个或多个表达式的数据列表,每个表达式是数组的一个元素;
  2. 使用数组字面量创建一个数组时,将包括空位(undefined)在内的元素进行初始化,而其长度被设定为元素的个数。
let arr1 = [1, , 3]		// length=3, arr[1]=undefined
let arr2 = [, 1, , 3]	// length=4, arr[0]=arr[2]=undefined
let arr3 = [1, 2, 3, ]	// length=3, 末尾的逗号不会占位

let arr = { 0: 1, 1: 2, length: 2 }
arr.__proto__ = Array(0).__proto__
arr

正则表达式

  1. 一个最基本的正则表达式,是字符被正斜线对(//)围成的表达式,是一个对象;
  2. 在正则表达式中,有形式变体,也有包含许多特殊含义的字符;
  3. 正则的相关语法不能说复杂,但用法灵活。下面只做一个简单例子:
let re = /[0-9]*[.]\d*w/
re.exec('编号:189a\n岗位:教师\n薪资:1.2w')	// 匹配到 1.2w

自定义对象

自定义对象字面值,使用花括号对({})包围、零个或多个“键值对”的(元素 )列表。

  • 属性名可以是任意字符串或者Symbol标识符:
    • 合法的字符串标识符可以不用引号包围,
    • 计算属性名需要被 [] 包围;
  • 属性值可以是任何值。
let o = {
	'': '',
	'': '!',
	name: 'jack',
	age: 18,
	show: function () { console.log(this.name); },
	birthday() { this.age++; },
	[Symbol('ID')]: 1,
	[1+11]: 12
}
  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值