数据类型伊始
原型数据类型
数据类型 字面量 数值( Number
)12
,3e2
,3.1232
,NaN
,Infinity
...字符串( String
)"asdadqw"
,'123123'
,"你好"
,...布尔值( Boolean
)true
,false
未定义( undefined
)undefined
,void 0
空( null
)null
复杂数据类型
数据类型 字面量 对象( Object
)[]
,{'a':'1','c':'haha'}
,function a(){}
ES6 新增原始数据类型,常用于解决命名冲突的问题
数据类型 字面量 一标识符( Symbol
)Symbol('foo')
,Symbol(2)
typeof()
可以判断变量的数据类型,用于保证操作的规范合法性
typeof(变量);
//或者使用关键字:
type 变量;
typeof(123); //"number"
typeof("DD"); //"string"
typeof(true); //"boolean"
typeof({}); //"Object"
typeof(undefined); //"undefined"
typeof(Symbol(123)); //"symbol"
特别的:
typeof null //"object",指未被赋值的初始化对象
typeof
function a() {} // "function",函数是第一公民,尽管它是对象
undefined
未定义
这种数据类型只有一个值是 undefined,当申明变量的时候没有初始化,它的值会被默认赋值为 undefined,
let a
typeof a //undefined
typeof b //undefined,此时对未声明的变量使用typeof会返回undefined
console.log(b) //但直接使用会报错Uncaught ReferenceError: b is not defined
void(0)
使用 void 运算符可以强制返回 undefined
null
空对象指针
null
类型只有一个值是null
,js 中没有指针的概念,这里只是抽象。null
的含义是空对象
let obj = null
typeof obj //"object"
//当我们定义变量准备用于保存对象,最好将变量初始化为`null`
//这样在未赋值的情况下检测变量类型就为"object",从而保证了类型的统一
boolean
布尔值
boolean
类型的值有两个字面值: true
和false
,不需要添加引号
代表的含义是一个是真一个为假。
let status = true
const IS_OPEN = false
true
或者false
常用于判断与条件分支,参与逻辑运算
可以理解为一种状态的选择与控制
number
数值
没有单位的量,表示一类东西的多少。
可以理解为双精度浮点型数据
let float1 = 2.1 //这是通常的写法
//小数点后6个0以上会转为科学计数法
let float2 = 2e-7 //表示2x10^(-7)
let float3 = 3e21 //表示3x10^(21)
当一个数超过约1.79e+308
的数时
浏览器无法处理,将自动转换成Infinity
当然,也有-Infinity
- 特殊的数:
NaN
(not a number,不是一个数),当我们计算或者操作失误的时候,报错之外的解决方案,返回NaN
,比如0/0
typeof NaN //"number"
string
字符串
由 0 个或者多个 unicode 字符串组成的字符序列,即字符串。字符串由双引号或单引号表示
let str1 = "114 "
let str2 = " 黑化肥发黑;" //都是合法的字符串
字符串一定要匹配,单引号开始单引号结束,双引号开始双引号结束。
转义字符串
常见的需要转义的符号:(不需要记)
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表符 |
\r | 回车 |
\\ | 单\ |
\' | 单引号',普通字符串 |
\" | 双引号" |
\u0030 | 0 注意这是 16 进制,unicode 编码 |
\u0041 | A |
\u0061 | a |
... | ... |
字符串特点:不可变,不可修改,只能替换
.toString()方法
可以将别的数据类型转换成字符串的方法:
let num = 255;
let str = num.toString(); //转换成字符串
//传入参数之后会按进制转换
>
num.toString(16)
"ff"
//模板字符串也可以自动执行toString
>
`${num}`
'255'
字符串拼接
两个以及以上的字符串首位相连,形成新的字符(ES5)
let str1 = "你"
let str2 = "好"
let str3 = str1 + str2 //"你好"
let str4 = "你" + str2
let str5 = "你" + "好"
console.log(str1) //"你"
console.log(str2) //"好"
ES6 模板字符串:利用`和${}进行组合拼接字符串,支持多行
let name = `犬山`
let age = 18
let words = `<div>
我的名字是${name},今年${age}岁~,虚岁${age + 1}
</div>`
object 实例对象
一个由多个属性构成的属性集合。属性间没有先后顺序,以逗号分隔。
属性由两部分构成: 属性名:属性值,
属性名可以是任意字符串,包括空字符串
var sw = {
name: "犬山哥",
age: 18,
"": "未知",
18: "cm",
}
console.log(sw) //{name:"犬山哥",age:18}
console.log(sw.age) //可以直接通过.的方式获取对象值
console.log(sw[""]) //"未知"
console.log(sw[18]) //"cm"
以属性名查询属性值时可以用小数点也可以用中括号。
使用小数点虽然不需要引号,但可能会有歧义,产生意想不到的错误。
如何创建对象
let obj1 = {} //作为数据存储的格式就用这个
let obj2 = new Object() //后面再讲
键中使用中括号
这是es6的语法,允许字面量中的键用中括号,
中括号内部可以字符串拼接等进行运算。
var a = "na"
var b = "me"
var dd = {
[a + b]: "dd",
}
//dd为{name: "dd"}
运算的结果会被强制转换为字符串。也就是自动执行.toString()
而 object 实例对象在.toString()
的时候会变成"[object Object]"
var obj = {
d: "d",
}
var dd = {
[obj]: "dd",
}
//相当于 dd = {}; dd["[object Object]"] = "dd"
//结果是dd为{[object Object]: "dd"}
特别的,数组(属于 object)在键里会变成其字面量去括号:
var arr = ["na", "me"]
var dd = {
[arr]: "dd",
}
//相当于 dd = {}; dd["na, me"] = "dd"
//结果是dd为{na,me: "dd"}