JS变量声明,数据类型和类型转换

173 阅读3分钟

推荐阅读:《我用了两个月的时间才理解 let》

变量声明

三种声明方式:

  1. var a = 1

    var过时,不好用。

  2. let a = 1

    let新的,更合理,用于变量声明。

  3. 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:

  1. 引号不属于字符串的一部分,例如: '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. 想在字符串里打会出,可以使用反引号+内容+回车+反引号.
  2. ' '字符串长度为1,空字符串和空格字符串不同。
  3. UTF-8 是Unicode的一种存储规则,也叫字符编码规则。

note:数字和字符串

  • 功能不同:

    1. 数字能加减乘除,字符串不行。
    2. 字符串可以表示电话号码,数字不行。
  • 存储形式不同:

    1. 数字:以64位浮点数的形式储存。
    2. 字符串:以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独创,没有本质区别。

  1. 若一个变量声明了,但无赋值,则默认为undefined默认。
  2. 而一个函数如果没写return,则返回值默认为undefined。
  3. 有人代码习惯上,非对象的空值为undefined,对象的空值为null。
  • 对象 object:下一篇单独发布。

note:

  1. 数组,函数和日期不是数据类型。
  2. 数组,函数和日期属于object。
  3. 四基两空一对象。
  4. undefined,null,number,string,bool,symbol为简单类型,object为复杂类型。
  5. 数据类型大小写无所谓。

类型转换

  • 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的秘密花园