什么是字面量:语法表达式定义的常量;或者说,通过由一定字词组成的语词表达式定义的常量
mdn中是这么说,但还是很模糊。其实值就是字面量,然后将其赋给变量。不同类型的值也就是不同的字面量(而不同的字面量自有其规定的语法)
1.数组字面量:
数组字面值:[]包含的零个,多个的表达式的列表,其中的表达式就是数组元素
var arr = [] =>这就是数组字面值
它可以有0 or 多个表达式
['表达式1','表达式2'] =>其中表达式也称为 (元素)
数组字面值 也是 数组对象
多余逗号之间会产生元素值是undefined,除了尾部多余逗号会被忽略
最后的,被省略,这个元素是不存在的,故arr3的长度只有5
var arr3 = [,1,,3,,] //undefined,1,undefined,3,undefined
最好对缺失的元素,显式的声明为undefined,提升代码清晰度和可维护性
无法理解:
-
备注: 这里的数组字面值也是一种对象初始化器。参考对象初始化器的使用。
-
若在顶层(全局)脚本里用字面值创建数组,JavaScript语言将会在每次对包含该数组字面值的表达式求值时解释该数组。 另一方面,在函数中使用的数组,将在每次调用函数时都会被创建一次。(求指教)
扩展(后期再总结至解构赋值,es6相关的):对于数组字面值使用...扩展运算符
会转化为 逗号分割的参数序列
...[1,2,3] // 1,2,3
我们常这样使用
var arr4 = [1,2,3]
console.log(...arr4) // 1,2,3
2.布尔字面量
布尔字面量:true 和 false
如何理解:
- 不要混淆作为布尔对象的真和假与布尔类型的原始值true和false。布尔对象是原始布尔数据类型的一个包装器。
这是个初始值为false的对象
var f = new Boolean(false) //Boolean{false}
if(f){
console.log('1')
}else{
console.log('2')
}
结果会输出 // 1
其值不是[undefined]或[null]的任何对象(包括其值为false的布尔对象)在传递给条件语句时都将计算为true。
3.整数字面量
这个没啥好说直接看例子,这些值便是整数字面量
0, 117 and -345 (十进制, 基数为10)
015, 0001 and -0o77 (八进制, 基数为8)
0x1123, 0x00111 and -0xF1A7 (十六进制, 基数为16或"hex")
0b11, 0b0011 and -0b11 (二进制, 基数为2)
4.浮点数字面量
同上
3.14
-.2345789 // -0.23456789
-3.12e+12 // -3.12*10^12
.1e-23 // 0.1*10^(-23)=10^(-24)=1e-24
5.对象字面量
对象字面值:封闭在{}中的0 or 多个 属性-值对(也叫元素)的列表
如=> { 键:值, 元素2, 元素3, }
- 其中, 属性 也可以随意写,如:
aosjdfo均为覅哦, - 但是, 对于这种不是合法的标识符,就一定要用 "" 包裹,
- 且, 访问只能用
[]
由于语句块也使用{}花括号,你不能在一条语句的开头就使用对象字面值,左花括号 { 会被认为语句块的起始符号
es6后,对象字面量被增强!
- 支持创建时设置原型
- 属性-值对为同一字符时可简写
- 方法简写,支持父方法调用
- 使用表达式动态计算属性名
1.__proto__
2.name:name =>name
3.省略function,super调用父方法
4.动态属性名,语法:['表达式']
funtion Yuanxing(age) {
this.age = age
this.fu = function() {return '调用了父方法'}
}
var Yx = new Yuanxing(18)
var name = '张三'
var obj = {
__proto__: Yx,
name, // name:name => name:'张三'
fangfa() {
return super.fu() // 返回 '调用了父方法'
}, // 以前 fangfa: function() {}
['active_'+1]:1 属性为=> //active_1
}
需注意:
对象访问属性值,[""]为万能的,
var obj = {name:'zs',2:'two'}
obj["name"] // zs
obj["2"] // 2
而
obj.2 , obj[name]
前者为不合法的属性名,不能使用`.`,
后者使用[]访问,name并不是其索引,都会出错
6. RegExp 字面值
一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。如: /ab+c/
7.字符串字面量
字符串字面量是由双引号(")对或单引号(')括起来的零个或多个字符。
"foo"
'bar'
"1234"
"one line \n another line"
"John's cat
???除非有特别需要使用字符串对象,否则,你应当始终使用字符串字面值。
8.模板字面量
模板字面量: `${}`
var name = 'zs'
`${name}` // zs
???在通过模板字符串前添加一个tag来自定义模板字符串的解析过程,这可以用来防止注入攻击,或者用来建立基于字符串的高级数据抽象。