数字与字符串
数字与字符串的区别
- 数字是数字,字符串是字符串
- 数字能加减乘除,字符串不能加减乘除
- 数字不能表示电话号码,字符串能表示电话号码
- 数字不可以以0开头,储存时会吧0给省略,导致数据流失
- 字符串可以以0开头,数据不会流失
- 数字与字符串存储形式不同
- JS中,数字是用64位浮点数的形式存储的
- JS中,字符串是用类似UTF8形式存储的
如何存数字
- 十进制转二进制
- 二进制转十进制
JS中的数据类型(重点记住)
- 数字
number
- 字符串
string
- 布尔
bool
- 符号
symbol
- 空
undefined
- 空
null
- 对象
object
- 注意:以下不是数据类型
数组,函数,日期
它们都属于object
数字number
写法
- 整数写法
1
- 小数写法
0.1
- 科学计数法
1.23e4
- 八进制写法
0o123
- 十六进制写法
0X3F
- 二进制写法
0b11
特殊值
- 有正0和负0之分 ,但是他们都等于0,要严格区分
- 无穷大之分:nfinity、 +Infinity、- nfinity
- 存在无法表示的数字 NaN (Not a Number) 以表示不能被表示的数,但他还是一个数
JS数字的存储形式
- 以64位浮点数形式储存
- 浮点就是浮动的点,意思就是小数点会乱动 * 123.456可以表示为1.23456e10^2,也可以表示为12345.610^-2 * 小数点可以随时变动
64位存储一个 number 符号占1位 指数占11位(-1023~1024) 有效数字占52位(开头的1省略)
范围和精度
- 范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大二进制数字
- Number. MAX Value:1.7976931348623157e+308
- 指数负方向拉满、有效数字最小1,得到最小值
- Number. MIN VALUE. 5e-324
- 精度(有效数字)
- 最多只能到52 进制位表示有效数字
- 2^53对应的十进制是9后面15个零
- 所以15位有效数字都能精确表示
- 16位有效数字如果小于90开头,也能精确表示
- 9110000000000001就存不下来
字符串string
写法
- 单引号:'你'
- 双引号: "你好"
- 反引号包裹:你好
- 注意:引号不属于字符串的一部分,只是表示他是一个字符串
- 如果要在单引号里面包含单引号怎么办?
- 导致错误写法,例子:
it's ok
, JS引擎会认为it'就结束了,后面的JS就看不懂 - 正确写法→转义: 'it'sok',"it'sok'
- 导致错误写法,例子:
转义(记住)
- 用另一种写法表示你想要的意思
\n
表示换行\r
表示回车\t
表示tab制表符\\
表示\\uFFF
表示对应的Unicode
字符\xFF
表示前256个Unicode
字符
- 例子:比如有多行字符串
- 如果你想要在字符串里回车
- 可以这样:
let s = `
- 用反引号很容易做到
- 可以这样:
- 如果你想要在字符串里回车
字符串的属性
- 注意:只有对象才有属性,那么字符串的有属性是什么?
字符串的长度
- 可以用这种方式查看字符串的长度
通过下标读取字符
- 通过这种方式读取处于不同位置的字符
base64
转码(招聘简历邮箱)
window.btoa
用来转码window.atob
用来解码
布尔boolean
- 只有两个值
true
和false
,注意大小写真
或假
- 下列运算符会得到bool值
- 否定运算
- !value
- 相等运算
- 1==2、1!=2、3==4、3!==4
- 比较运算
- 1>2、1≥2、3<4、3<4
- 否定运算
if
配bool
- if语句常常需要判断真假
- if (value) {...} else{...}
五个falsy值(重点记住)
-
falsy
就是相当于false
但又不是false
值- undefined
- null
- 0
- NaN
- ''
''
和' '
不是一个玩意,请保持严谨
-
undefined
和null
两种空类型,空空如也- 这是JS的原创之处
-
细节一
-
变量声明了,但没有赋值,那么默认值就是 undefined,而不是hut
-
细节二
- 如果一个函数,没有写 return,那么默认 return undefined,而不是null
-
细节三
- 前端程序员习惯上,把非对象的空值写为 undefined
- 対象的空值写为nll
变量声明(三种声明方式)
var a = 1
let a = 1
const a = 1
-
var是过时的、不好用的方式
- var 变量提升
-
let是新的,更合理的方式
- 遵循块作用域,即使用范围不能超出{}
- 不能重复申明 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的let変量,不会变成 window的属性
- for循环配合let有奇效
-
const 大部分与let一样
- 重点:是声明时必须赋值,且不能再改的方式
- 但是可以改里面的属性
-
name和'name'的区别别
- name是变量
- 值可变,可能是'name',也可能是" hello
- name'是***字符串***常量
- 常量就是不变量,'name'只能是'name',不能是其他值
- name是变量
类型转换
- number => string
- String(n)
- n+''
- string => number
- Number(s)
- parselnt(s)/parsefloat(s)
- s-0
- x=> bool
- Boolean(x)
- !!x
- X=> string
- String(x)
- x.toString()