我觉得第三章,内容并不多(因为大多很基础,很多操作都是特
殊情况,一般遇不到,也没必要记忆)
3.4数据类型
undefiened null boolean number string symbol
let message = 'some string';
console.log(typeof message)//"string"
console.log(typeof 99)//"number"
undefined
声明单位初始化,一般就是undefined
let message;//undefined
Null
Null 类型只有一个值,即特殊值null,表示一个空对象指针
let car = null;
console.log(car) //'object'
在定义将来要保存对象值的变量时,建议用null来初始化,
这样可以知道他未来是否作为对象
if(car != null) {
//car是一个对象的引用
}
Boolean
Number
Number.MAX_VALUE //可以表示的最大值
NaN不是数值
isNaN()
console.log(isNaN(NaN))//true
String类型
模板字面量标签函数
模板字面量的一种使用吧,算是
let a = 6;
let b = 9;
function simpleTag(strings, av, bv,sum) {
console.log(strings)
console.log(av)
console.log(bv)
console.log(sum)
return 'hahaha'
}
let untagg = `${a} + ${b} = ${a+b}`
let taggedRes = simpleTag`${a} + ${b} = ${a+b}`
console.log(untagg)
console.log(taggedRes)
输出:
[ '', ' + ', ' = ', '' ]
6
9
15
6 + 9 = 15
hahaha
个人感觉用的未必多,具体再去读43页,或者mdn(用到的时候)
原始字符串
直接获取原始的模板字面量内容
console.log(String.raw`\u00A9`)
console.log(String.raw`a
b`)
输出
\u00A9
a
b
符号
符号用来创建唯一记号,进而用作非字符串形式的对象属性
let sym = Symbol()//不能new
console.log(typeof sym)//'object'
可以传入一个字符串参数描述符号,但是与其定义或标识无关
let a = Symbol('foo')
let b = Symbol('foo')
console.log(a==b) //false
使用全局符号注册表
let a = Symbol.for('foo')
//在全局符号注册表中创建并重用符号,如果不存在对应符号,
//生成一个新符号添加到注册表;
//如果已经存在则返回已有的
let a = Symbol.for()//undefined
//必须以字符串为键
let a = Symbol.for('foo')
let b = Symbol('foo')
console.log(a==b)//false
//全局注册表中定义的与Symbol定义的并不相同
let a = Symbol.for('foo')
console.log(Symbol.keyFor(a))//foo
//必须是全局注册表中定义的,否则不对
作为对象的属性
let s1 = Symbol('foo')
let o = {
[s1]: 'foo val'
}
//o[s1]='abc'
//Object.defineProperty(o,s1,{value:'aaa'})
获取属性
Object.getOwnPropertySymbols(o)//用来获取符号属性,返回数组
Object.getOwnPropertyNames(o)//用来获取常规属性数组
Object.getOwnPropertyDescriptors(o)//包含两种类型属性的对象
Reflect.ownKeys(o)//l两种类型的键
常用内置符号
不可写、不可枚举、不可配置,就是全局函数Symbol的普通字符串属性,指向一个符号的实例
跳过了,书上已经折页,太过抽象,而且涉及不会的,后面回来做
感觉目前也未必重要
操作符
按位非~
let num = 25;
let num2 = ~num;
console.log(num2)
按位与 &
按位或 |
按位异或 ^
左移
let oldValue = 2;
let newVal = oldValue << 5;
左移五位,右面补0
有符号右移
>>
let olV = 64;
let newVal = olV >> 5
符号值填补左侧空值
无符号右移
>>>
let Olv = 64;
let newVa = 64 >>> 5;
//左面补0
其他
指数操作符 **
3**2 //9
语句
for-in:
一种严格的迭代语句,用于枚举对象中的非符号键属性
for(property in expression) {
}
for(const propName in window){
document.write(propName)
}
//propName 应该循环window对象的属性值,
//webStorm报错
for-of:
一种严格的迭代语句,遍历可迭代对象的元素
for(propery of expression) statement;
for(const el of [2,4,6,8]) {
console.log(el)
}
//如果尝试迭代的变量不支持迭代,则for-of报错
标签语句和with语句感觉不常用,不进行复习