概述
JavaScript的数据类型
- number : 数字
- string : 字符串
- boolean : 布尔值(表示真伪的两个特殊值,即
true(真)和false(假)) - undefined : 空值,(表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值)
- null : 空值,即此处的值为空
- object : 对象
- symbol : 符号
- bigint:可以表示任意大的整数
本篇主要记录number、string、boolean、undefined、null 。
object内容较多单独写一篇笔记。
文章作为笔记记录学习相关内容,有更深入理解会进行补充、修改。
注意
数字与字符串区别
数字与字符串是不同的。例如:都是一,为什么要分 1 和 '1'
- 功能不同
- 数字能加减乘除,字符串不行
- 字符串能表示电话号码,数字不行
- 存储形式不同
- JS 中,数字是用 64 位浮点数的形式存储的
- JS 中,字符串是用类似 UTF8 形式存储的(UCS-2)
以下不是数据类型
数组 、函数 、日期(它们都属于 object)
number(数字)
写法
- 整数写法 :
1 - 小数写法 :
0.1 - 科学计数法 :
1.23e4 - 八进制写法 :
0123或00123或0o123 - 十六进制写法 :
0x3F或0X3F - 二进制写法 :
0b11或0B11
特殊值
- +0 和 -0 :都等于0,要严谨
- 无穷大 :Infinity 、+Infinity 、-Infinity
- NaN :(Not a Number)无法表示的数字,但它是一个数字
(NaN是一个不确定的数字)
存储形式
- JS用 64位浮点数 存储number, 大家都是浮点数,没有整数
64位浮点数
- 浮点就是浮动的点,意思就是小数点会乱动。
- 例如:123.456 可以表示为 1.23456e10^2 ;也可以表示为 12345.6e10^-2
- 64位存储一个 number
- 符号占 1 位
- 指数占 11 位(-1023~1024)
- 有效数字占 52 位(开头的 1 省略)
例如:(二进制) -1.01100110*2^8 中负号存1,指数部分存8,有效数字存01100110(省略第一个1)
- 范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大值:(Number.MAX_VALUE: 1.7976931348623157e+308)
- 指数负方向拉满、有效数字最小1,得到最小值:(Number.MIN_VALUE: 5e-324)
- 精度(有效数字)
- 最多只能到52+1个二进制位表示有效数字
- 2^53 对应的十进制是 9 后面 15 个零,所以15位有效数字都能精确表示
- 16位有效数字如果小于 90 开头,也能精确表示,但是9110000000000001 就存不下来
存储大于下图数字的都会造成丢失
例如:
string(字符串)
(一个字符串占两个字节)
写法
-
单引号:
'你好' -
双引号:
"你好" -
反引号:
`你好` -
注意:引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
转义
用另一种写法表示你想要的东西,例如想在单引号里面再加单引号
\'表示'\"表示"\n表示换行\r表示回车\t表示tab 制表符\\表示\\uFFFF表示对应的 Unicode 字符\xFF表示前 256 个 Unicode 字符- 反引号里加上反引号时,需要把外面的反引号
` `变成`` `` - 想在字符串里回车可以给相关内容用反引号包起来
字符串长度
- 字符串
\n\t\r的长度是3 ''空字符串的长度是0' '包含一个空格的字符串长度是1
- 通过下标读取字符
- 从0开始
Base64 转码
window.btoa:正常字符串转为 Base64 编码的字符串window.atob:Base64 编码的字符串转为原来的字符串
boolean(布尔值)
- 布尔值代表“真”和“假”两个状态。“真”用关键字
true表示,“假”用关键字false表示。布尔值只有这两个值。 - 下列运算符会得到 bool 值:
- 否定运算
!value - 相等运算
1 == 2、1 != 2、3 === 4、3 !== 4 - 比较运算
1 > 2、1 >= 2、3 < 4、3 <= 4
- 否定运算
- 如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为
false,其他值都视为true。- undefined
- null
- 0
- NaN
- false
- '' (空字符串)
- 注意:
''和' '不是一个玩意
- 注意:
undefined 和 null
null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。- 细微区别
- 如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
- 如果一个函数,没有写 return,那么默认 return undefined,而不是 null
- 前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null,但仅仅是习惯上而已
symbol (符号)
Symbol 生成一个全局唯一的值
后续理解后再做补充
学习文章参考:
1.知乎-方应杭- 「每日一题」JS 中的 Symbol 是什么?
2.MDN: [Symbol - JavaScript]
3.阮一峰:[ECMAScript 6入门]
变量声明
三种声明方式
var a = 1let a = 1const a = 1
var 是过时的、不好用的方式 ;let 是新的,更合理的方式;const 是声明时必须赋值,且不能再改的方式
let 声明规则
- 遵循块作用域,即使用范围不能超出
{ } - 不能重复申明
- 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的 let 变量,不会变成 window 的属性
- for 循环配合 let 有奇效
const 声明规则
跟 let 几乎一样,只有一条不一样:声明时就要赋值,赋值后不能改
注意
name和'name'的区别name是变量;值可变,可能是'name',也可能是'hello''name'是字符串常量;常量就是不变量。'name'只能是'name',不能是其他值
类型转换
- number => string
String(n)n + ''
- string => number
Number(s)parseInt(s)- 新的ES6不用声明是否是十进制
- 新的ES6不用声明是否是十进制
parseFloat(s)s - 0+ s(正号会尝试把他后面的内容变成number)
- x => bool
Boolean(x)!!x!!1是 true ;!!0是 false
- x => string
String(x)x.toString()- 若x写成数字 1 会有BUG,因为JS会以为在写小数,需改成
(1).toString()或者1..toString()
- 若x写成数字 1 会有BUG,因为JS会以为在写小数,需改成
资料来源:饥人谷-前端体系课(方应杭)