六种基本数据类型
undefined(未定义)、null(空)、Boolean(布尔)、String(字符串)、Number(数字)、Symbol、BigInt(大整数)
变量
变量声明(有var 有变量名字,没有值) 变量初始化(有var 有变量名,有值)
为什么要使用变量?--操作数据
| var | let | const | |
|---|---|---|---|
| 变量提升 | √ | × | × |
| 全局变量 | √ | × | × |
| 重复声明 | √ | × | × |
| 重新赋值 | √ | √ | × |
| 暂时死区 | × | √ | √ |
| 块作用域 | × | √ | √ |
| 只声明不初始化 | √ | √ | × |
变量交换
//第一种
var a = 1,b=10
var temp = a
a = b
b = temp
//第二种
var a=1,b=20;
a=a+b;
b=a-b;
a=a-b;
//第三种
var a=1,b=10;
function fun(){
[a,b] = [b,a]
console.log('a:'+a);
console.log('b:'+b);
}
fun()
数据类型
类型判断
toString.call()
#判断所有类型
toString.call()
用法:
Object.prototype.toString.call(123) === "[object Number]" //true
toString.call("")==="[object String]" //true
typeof
#判断基本数据类型
typeof
用法:
typeof 值
instanceof
//判断引用类型
//用于判断某个变量是否是某个对象的实例,返回值为true或false
instanceof
arr instanceof Array
prototypeObj.isPrototypeOf(object) //用于测试一个对象是否存在于另一个对象的原型链上
Person.isPrototypeOf(person)//返回true || false
Object.getPrototypeOf(object) //返回指定对象的原型(内部[[Prototype]]属性的值)
Object.getPrototypeOf(person1) === Person.prototype //返回true || false
undefined
未定义,变量声明了没有赋值,函数没有明确返回值
null
空类型,一个对象指向为空,此时可以赋值为null
BigInt
ES2020 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。 为了与 Number 类型区别,BigInt 类型的数据必须添加后缀n
1234 // 普通整数
1234n // BigInt
// BigInt 的运算
1n + 2n // 3n
BigInt 可以使用负号(-),但是不能使用正号(+),因为会与 asm.js 冲突。
-42n // 正确
+42n // 报错
BigInt对象
可以用作构造函数生成 BigInt 类型的数值。转换规则基本与Number()一致,将其他类型的值转为 BigInt。
BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1n
BigInt()构造函数必须有参数,而且参数必须可以正常转为数值,下面的用法都会报错。
new BigInt() // TypeError
BigInt(undefined) //TypeError
BigInt(null) // TypeError
BigInt('123n') // SyntaxError
BigInt('abc') // SyntaxError
数值运算
let max = Number.MAX_SAFE_INTEGER
console.log(max); //9007199254740991
console.log(max+1); //9007199254740992
console.log(max+2); //9007199254740992
console.log(BigInt(max)); //9007199254740991n
console.log(BigInt(max)+BigInt(1)); //9007199254740992n
console.log(BigInt(max)+BigInt(2)); //9007199254740993n