计算机存储信息的形式为0和1,也就是二进制
进制缩写
HEX:十六进制, BIN:二进制, OCT:八进制, DEC:十进制
JS的数据类型
- 数字 number
- 字符串 string
- 布尔 bool
- 符号 symbol
- 空 undefined
- 空 null
- 对象 object
总结:四基两空一对象
以下不是数据类型:数组、函数、日期,它们都属于object
number
注意:JS中的数字都是以浮点数形式存储的!!!没有整数!!!
number由64位浮点数组成,根据IEEE754标准,符号占一位,指数占11位(-1023~1024),有效数字占52位(开头的1省略)。
除了常规写法,还支持科学计数法、进制写法。
特殊的数字:
- 正0和负0,都是0
- 无穷大: infinity、+infinity、-infinity
- 无法表示的数字:NaN (Not a number)
string
每个字符两个字节(阉割版UTF-8)
写法有单引号''、双引号""和反引号``。反引号支持多行字符串。
单引号里加单引号怎么办?使用转义符
'it\'s ok // 这就是转义'
转义符的更多用法请自行Google,在此不一一列举。
boolean
boolean取值:true和false
五个falsy值(相当于false但又不是false的值):undefined、null、0、Nan、''(不是' '哦!)
undefined和null
两种空类型,这是JS的原(垃)创(圾)之处。 区别:没有本质区别
- 如果一个变量声明了,但没有赋值,那么默认值就是
undefined,而不是null - 如果一个函数,没有写return,那么默认return
undefined,而不是null(null更倾向于主动定义的空类型,undefined更倾向于默认被动定义) - 前端开发者的习惯上,把非对象的空值写为
undefined,把对象的空值写为null,但仅仅是习惯上而已
symbol
不怎么用,有需求时自行Google。
变量声明
三种声明方式
var a = 1;
let a = 1;
const a = 1;
a = 1;
区别:
var是过时的,不好用的方式let是新的,更合理的方式(ES6),变量声明const是声明时必须赋值(ES6),一般认为是常量声明- 最后一个语句是赋值,辟谣:绝对不是声明全局变量!!
建议: 写代码不要用
var
let声明规则
- 遵循块作用域,即使用范围不超出
{}
{let a = 1;}
console.log(a);
此段代码会报错,因为console.log(a)脱离了变量a的作用域。
- 不能重复声明
- 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的
let,不会变成window的属性 for循环配合let有奇效
for(let i=0; i<5; i++){
setTimeout(() => { console.log(i); })
}
const声明规则
- 跟
let声明规则一样 - 只有一条不一样:声明时就要赋值,赋值后不能改。只读变量的另一种叫法:常量
类型转换
number => string
var n = 1;
String(n);
或者n+''或者''+n
string => number
var s = '123';
Number(s);
或者s-0或者+s或者parseInt(s)
x => bool
Boolean(x)或者!!x
x => string
String(x)x.toString()or(number).toString()ornumber..toString(),这算是某种bug。