推荐阅读:《我用了两个月的时间才理解 let》
变量声明
三种声明方式:
-
var a = 1
var过时,不好用。
-
let a = 1
let新的,更合理,用于变量声明。
-
const a = 1
const声明必须赋值,不可更改,用于常量声明。
let 声明:
- 遵循块作用域,使用范围不超过{}。
- 不能重复声明。
- 可以赋值也可不赋值。
- 先声明后使用,否则报错。
- 全局声明的let变量,不会变成window的属性,但是var可以。
- for循环配合let有奇效(面试题)。
const声明:
- 规则几乎跟let一样。
- 声明时就要赋值,且赋值后不能更改(只读变量,即常量)。
- 无法和for配合,因为值不可改。
note:变量声明的时候,既指定了值,也指定了类型。
JS数据类型
-
数字 number: 64位浮点数存储一个number,其中符号占1位,指数占11位(-1023~1024),有效数字占52位(省略开头的1)。
note:正0,负0和0是不一样的。
-
字符串 string:阉割版UTF8
- 单引号''
- 双引号""
- 反引号``(es6)
note:
- 引号不属于字符串的一部分,例如: 'it's ok'只表示it就结束,而
'it/'s ok' //转义,表示it's ok
"it's ok"
`it's ok`用反引号`来引用,万能
```
\' 表示'
\" 表示"
\\ 表示/
\n 表示换行
\r 表示回车
\t 表示Tab制表符
\uFFFF 表示对应的Unicode字符
\xFF表示前256个Unicode字符
```
- 想在字符串里打会出,可以使用反引号+内容+回车+反引号.
- ' '字符串长度为1,空字符串和空格字符串不同。
- UTF-8 是Unicode的一种存储规则,也叫字符编码规则。
note:数字和字符串
-
功能不同:
- 数字能加减乘除,字符串不行。
- 字符串可以表示电话号码,数字不行。
-
存储形式不同:
- 数字:以64位浮点数的形式储存。
- 字符串:以UTF8形式储存。
-
布尔 bool: if...else...
- ture:1==1,4>3等等。
- false:!value,1==2等等。
- 5个falsy值(相当于false但又不是false的值):undefined,null,0,NaN和''。
-
符号 symbol:用的很少。
-
空 undefined和空 null:JS独创,没有本质区别。
- 若一个变量声明了,但无赋值,则默认为undefined默认。
- 而一个函数如果没写return,则返回值默认为undefined。
- 有人代码习惯上,非对象的空值为undefined,对象的空值为null。
- 对象 object:下一篇单独发布。
note:
- 数组,函数和日期不是数据类型。
- 数组,函数和日期属于object。
- 四基两空一对象。
- undefined,null,number,string,bool,symbol为简单类型,object为复杂类型。
- 数据类型大小写无所谓。
类型转换
-
number=>string
- String(n)
- n+''
-
string=>number
- Number(s)
- s - 0
- +s
- parseInt(s)
- parseFloat(s)
-
x=>bool
- Boolean(1)
- !!1
-
x=>string
- x.toString
note:js的bug
JS的奇葩
可查看JS的秘密花园