JS 数据类型和运算符

152 阅读3分钟

一、JS中的数据类型

(一)类型:7种(大小写无所谓)

(1)数字 number

  1. 写法
  • 整数写法:1
  • 小数写法:0.1
  • 科学计数法:1.23e4
  • 八进制写法(用得少):0123 或 00123 或 0o123
  • 十六进制写法:0x3F 或 0X3F
  • 二进制写法 0b11 或 0B11
  1. 特殊值
  • 正0 和 负0 都等于 0,但1/-0=-Infinity
  • 无穷大:Infinity 、+Infinity 、-Infinity
  • 无法表示的数字:NaN (Not a Number),如:0/0
  1. JS数字的存储形式:64位浮点数
  • 浮点就是浮动的点,意思就是小数点会乱动,123.456 可以表示为 1.23456e10^2,也可以表示为 12345.6e10^-2
  • 64位存储一个 number,符号占 1 位,指数占 11 位(-1023~1024),有效数字占 52 位(开头的 1 省略) image.png
  1. 范围(忽略符号位)
  • 指数拉满、有效数字拉满,得到最大二进制数字 Number.MAX_VALUE: 1.7976931348623157e+308
  • 指数负方向拉满、有效数字最小1,得到最小值 Number.MIN_VALUE: 5e-324
  1. 精度(有效数字)
  • 最多只能到52+1个二进制位表示有效数字
  • 2^53 对应的十进制是 9 后面 15 个零
  • 所以15位有效数字都能精确表示
  • 16位有效数字如果小于 90 开头,也能精确表示
  • 9110000000000001 就存不下来

(2)字符串 string

  1. 写法
  • 每个字符两个字节(阉割版 UTF8)
  • 单引号:'你好'
  • 双引号:"你好"
  • 反引号:
`你好`
  • 注意:引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
  • 如果要在单引号里面包含单引号怎么办?
  1. 转义:用另一种写法表示你想要的东西
  • 错误写法'it's ok'
正确写法:
'it\'s ok'  // 这就是转义
"it's ok"
`it's ok`
\' 表示 '
\" 表示 "
\n 表示换行
\r 表示回车
\t 表示 tab 制表符
\\ 表示 \
\uFFFF 表示对应的 Unicode 字符
\xFF 表示前 256Unicode 字符
  1. 多行字符串
  • 如果你想要在字符串里回车
let s = `这样是
可以的
用反引号很容易做到`
  1. 字符串的长度
  • string.length
'123'.length // 3
'\n\r\t'.length // 3
''.length // 0 (空字符串)
' '.length // 1(有空格)
'\\\\\\'.length // 3
  1. 通过下标读取字符
  • string[index]
let s = 'hello';
s[0] // "h"
  • 注意 index 从 0 开始,s[0] 是第一个字符
  • 注意 index 到 length
let s = 'hello';
s[5] // undefined,居然不报错
s[4] // 'o'
  1. base64 转码
  • window.btoa:正常字符串转为 Base64 编码的字符串
  • window.atob:Base64 编码的字符串转为原来的字符串

(3)布尔 bool

  1. 只有两个值,true 和 false 2.下列运算符会得到 bool 值
- 否定运算`!value`
- 相等运算`1 == 2、1 != 2、3 === 4、3 !== 4`
- 比较运算`1 > 2、1 >= 2、3 < 4、3 <= 4`

3.if 配 bool

  • if 语句常常需要判断真假if( value ) { ... } else { ... } 4. 五个 falsy 值
  • falsy 就是相当于 false 但又不是 false 的值
  • 分别是 undefined null 0 NaN ''

(4)符号 symbol

1.用途:Symbol 可以创建一个独一无二的值(但并不是字符串)

(5) 空 undefined 和(6)空 null

  1. 区别:没有本质区别
  • 细节一:如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
  • 细节二:如果一个函数,没有写 return,那么默认 return undefined,而不是 null
  • 细节三:前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null,但仅仅是习惯上而已

(7)对象 object(详见JS对象文章)

(8) 总结:四基两空一对象

数字 number
字符串 string
布尔 bool
符号 symbolundefinednull
对象 object

以下不是数据类型

  • 数组、函数、日期,它们都属于 object

二、变量声明

  1. 三种声明方式
var a = 1 (var 是过时的、不好用的方式)
let a = 1 (let 是新的,更合理的方式)
const a = 1(const 是声明时必须赋值,且不能再改的方式)
a = 1(错的方式)
  1. let 声明 规则:
  • 遵循块作用域,即使用范围不能超出 { }
  • 不能重复申明
  • 可以赋值,也可以不赋值
  • 必须先声明再使用,否则报错
  • 全局声明的 let 变量,不会变成 window 的属性
  • for 循环配合 let 有奇效
  1. const 声明 规则:
  • 跟 let 几乎一样,只有一条不一样:声明时就要赋值,赋值后不能改
  1. 变量声明指定了值,同时也指定了类型,但是值和类型都可以随意变化
  2. name'name' 区别
  • name 是变量,值可变,可能是 'name',也可能是 'hello'
  • 'name' 是字符串常量,常量就是不变量,'name' 只能是 'name',不能是其他值

三、类型转换

  1. number => string
  • String(n)
  • n + ''
  1. string => number
  • Number(s)
  • parseInt(s) / parseFloat(s)
  • s - 0
  • + s
  1. x => bool
  • Boolean(x)
  • !!x
  1. x => string
  • String(x)
  • x.toString()