Skip to content

数据类型伊始

  • 原型数据类型

    数据类型字面量
    数值(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()

可以判断变量的数据类型,用于保证操作的规范合法性

javascript
typeof(变量);
//或者使用关键字:
type 变量;

typeof(123); //"number"
typeof("DD"); //"string"
typeof(true); //"boolean"
typeof({}); //"Object"
typeof(undefined); //"undefined"
typeof(Symbol(123)); //"symbol"

特别的:

javascript
typeof null //"object",指未被赋值的初始化对象
typeof

function a() {} // "function",函数是第一公民,尽管它是对象

undefined未定义

这种数据类型只有一个值是 undefined,当申明变量的时候没有初始化,它的值会被默认赋值为 undefined,

javascript
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的含义是空对象

javascript
let obj = null
typeof obj //"object"
//当我们定义变量准备用于保存对象,最好将变量初始化为`null`
//这样在未赋值的情况下检测变量类型就为"object",从而保证了类型的统一

boolean布尔值

boolean类型的值有两个字面值: truefalse,不需要添加引号
代表的含义是一个是真一个为假。

javascript
let status = true
const IS_OPEN = false

true或者false常用于判断与条件分支,参与逻辑运算
可以理解为一种状态的选择与控制

number数值

没有单位的量,表示一类东西的多少。
可以理解为双精度浮点型数据

javascript
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
javascript
typeof NaN //"number"

string字符串

由 0 个或者多个 unicode 字符串组成的字符序列,即字符串。字符串由双引号或单引号表示

javascript
let str1 = "114  "
let str2 = "  黑化肥发黑;" //都是合法的字符串

字符串一定要匹配,单引号开始单引号结束,双引号开始双引号结束。

转义字符串

常见的需要转义的符号:(不需要记)

字面量含义
\n换行
\t制表符
\r回车
\\单\
\'单引号',普通字符串
\"双引号"
\u00300 注意这是 16 进制,unicode 编码
\u0041A
\u0061a
......

字符串特点:不可变,不可修改,只能替换

.toString()方法

可以将别的数据类型转换成字符串的方法:

javascript
let num = 255;
let str = num.toString(); //转换成字符串

//传入参数之后会按进制转换
>
num.toString(16)
"ff"
//模板字符串也可以自动执行toString
>
`${num}`
'255'

字符串拼接

两个以及以上的字符串首位相连,形成新的字符(ES5)

javascript
let str1 = "你"
let str2 = "好"
let str3 = str1 + str2 //"你好"
let str4 = "你" + str2
let str5 = "你" + "好"
console.log(str1) //"你"
console.log(str2) //"好"

ES6 模板字符串:利用`和${}进行组合拼接字符串,支持多行

javascript
let name = `犬山`
let age = 18
let words = `<div>
  我的名字是${name},今年${age}岁~,虚岁${age + 1}
</div>`

object 实例对象

一个由多个属性构成的属性集合。属性间没有先后顺序,以逗号分隔。
属性由两部分构成: 属性名:属性值,
属性名可以是任意字符串,包括空字符串

javascript
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"

以属性名查询属性值时可以用小数点也可以用中括号。
使用小数点虽然不需要引号,但可能会有歧义,产生意想不到的错误。

如何创建对象

javascript
let obj1 = {} //作为数据存储的格式就用这个
let obj2 = new Object() //后面再讲

键中使用中括号

这是es6的语法,允许字面量中的键用中括号,
中括号内部可以字符串拼接等进行运算。

javascript
var a = "na"
var b = "me"
var dd = {
    [a + b]: "dd",
}

//dd为{name: "dd"}

运算的结果会被强制转换为字符串。也就是自动执行.toString()
而 object 实例对象在.toString()的时候会变成"[object Object]"

javascript
var obj = {
    d: "d",
}
var dd = {
    [obj]: "dd",
}

//相当于 dd = {}; dd["[object Object]"] = "dd"
//结果是dd为{[object Object]: "dd"}

特别的,数组(属于 object)在键里会变成其字面量去括号:

javascript
var arr = ["na", "me"]
var dd = {
    [arr]: "dd",
}

//相当于 dd = {}; dd["na, me"] = "dd"
//结果是dd为{na,me: "dd"}