JS中的数据(一)

200 阅读4分钟

七种,不区分大小写。

  1. 数字 number
  • 64位浮点数
  • 写法:
  • 整数写法: 1
  • 小数写法: 0.1
  • 科学计数法: 1.23e4
  • 八进制写法(用得少): 0123001230O123
  • 十六进制写法:0x3F0X3F
  • 二进制写法:0b110B11
  • 特殊值:
  • 正0负0 : 都等于0,要严谨
  • 无穷大:Infinity , +Infinity , -Infinity
  • 无法表示的数字:NaN(Not a Number)但它是一个数字
  • NaN !== NaN
  • JS数字的存储形式:
  • 浮点数就是浮动的点,意思就是小数点会乱动
  • 123.456 可以表示为 1.23456e10^2
  • 也可以表示为 12345.6e10^-2

  • 64位存储一个number
  • 符号占一位
  • 指数占11位(-1023 ~ 1024)
  • 有效数字占 52 位(开头的 1 省略)
  • 范围(忽略符号位)
  • 指数拉满、有效数字拉满,得到最大二进制数字
  • Number.MAX_VALUE:1.7976931348623157e+308
  • 指数负方向拉满、有效数字最小1,得到最小值
  • Number.MIN_VALUE: 5e-324
  • 精度:(有效数字)
  • 最多只能到52+1个二进制位表示有效数字
  • 2^53对应的十进制是9后面15个零
  • 所以15位有效数字都能精确表示
  • 16位有效数字如果小于90开头,也能精确表示
  • 911 0000 0000 0000 1就存不下来
  1. 字符串 string
  • 每个字符两个字节(阉割版UTF-8)
  • 写法:
  • 单引号:'你好'
  • 双引号:"你好"
  • 反引号:`你好`
  • 注意:
  • 引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
  • 如果在单引号里面包含单引号怎么办:
  • 'it\'s ok'//这就是转义
  • "it's ok"
  • `it's ok`
  • 转义:用另一种写法表示你想要的东西
  • \'表示'
  • \"表示"
  • \n表示换行
  • \r表示回车
  • \t表示tab制表符
  • \\表示\
  • \uFFFF表示对应的Unicode字符
  • \xFF表示前256个Unicode字符
  • 多行字符串
  • 如果你想要在字符串里回车
let s = `这就是

可以的

用反引号很容易做到` 
  • 以前没有反引号的时候,写起来很麻烦。
  • 字符串的属性:
  • 字符串的长度:string length
'123'.length // 3
'\n\r\t'.length // ?
''.length // 0
' '.length // 1
  • 通过下标读取字符
string[index]
let s = 'hello';
s[0] // "h"
  • 注意index从0开始,s[0]是一个字符
  • 注意index到length
let s = 'hello'
s[5] // undefined,居然不报错
s[4] // '0'
  • base 64 转码 :
  • window.btoa : 正常字符转为Base64编码的字符串
  • window.atob : Base64编码的字符串转为原来的字符串
  • 一般用来隐蔽招聘启事里的简历邮箱
  • 邮箱:ZmFuZ3lpbmdoYW5nQGZveG1haWwuY29t
  • 有时候也用来自欺欺人,所谓的「加密」,也就能骗过一部分外行人
  1. 布尔 bool
  • 某些运算可以得到布尔值
  • 否定运算:!value
  • 相等运算: 1 == 2, 1 != 2, 3 === 4, 3 !== 4
  • 比较运算: 1 > 2, 1 >= 2, 3 < 4, 3 <= 4
  • if 配 bool
  • if语句常常需要判断真假:if(value){..}else{..}
  • 问题来了:
  • 如果value是bool值还好说,如果value不是bool值咋办,谁真谁假
  • 1是真还是假,0 是真还是假
  • '1'是真还是假,'0'是真还是假
五个falsy值:
falcy就是相当于false但又不是false的值
分别是 undefined  null   0   NaN   '' (空字符串)
  1. 符号 symbol
  2. undefined
  3. 对象 object
  4. 总结:四基两空一对象
  5. 以下不是数据类型:
  • 数组、函数、日期
  • 他们都属于 object

两个空:undefinednull的区别

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

变量声明

  • 三种变量声明方式
var a = 1
let a = 1
const a = 1
a = 1
  • 区别:var是过时的、不好用的方式;let是新的,更合理的方式;const是声明时必须赋值,且不能再改的方式;最后这种方式是错的,不准这样声明
  • var变量提升
  • 指定值:var a = 1
  • 同时也指定了类型:var a = 1
  • 但是值和类型都可以随意变化
  • a = 2
  • a = '字符串'

let声明

  • 规则:
  • 遵循块作用域,即适使用范围不能超出{}

  • 不能重复声明

  • 可以赋值,也可以不赋值
  • 必须先声明再使用,否则报错
  • 全局声明的let变量,不会变成window的属性
  • for循环配合let有奇效

const声明

  • 规则:跟let几乎一样
  • 只有一条不一样:声明时就要赋值,赋值后不能改

name和'name'的区别是什么

  • name是个变量,和'name'存储在内存的区域不同,name的类型不同,name可以是任何东西,甚至可以是个对象
  • 'name'存储在内存的stack区域,是字符串常量,内容不可变


类型转换

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