JS数据类型

162 阅读3分钟

JavaScript 中共有七种内置数据类型

  • number(数字)
  • string(字符串)
  • boolean(布尔值)
  • symbol(符号)
  • null(空值)
  • undefined(未定义)
  • object(对象)

一、数字 number

数字的特殊值有:

  • 0, +0, -0;

  • 无穷大 Infinity、正无穷大+Infinity、负无穷大-Infinity;

  • 无法表达的数字 —— NaN;

二、字符string

1、写法

'hi' // 单引号
"hi" // 双引号
`hi` //反引号 

引号不属于字符串的一部分

2、转义

例如 'it's ok' ,JS引擎会认为 'it' 就结束了。

正确写法

  • 转义: 前面加斜杠 \ ,例如 'it's ok'
"it's ok" // 外面用双引号

`it's ok` //-外面用反引号

转义——用另一种写法表示你想要的东西

  • ' —— ' 单引号
  • " —— " 双引号
  • \n —— 换行
  • \r —— 回车
  • \t —— tab 制表符
  • \b —— 空格
  • \ —— 斜杠
  • \uFFFF —— 对应的Unicode 字符
  • \xFF —— 前 256 个Unicode 字符
  • 多行字符串:外面用反引号

3、多行字符串

  • 在字符串里输入回车
`let s =`用反引号
就可以实现
此操作`

4、字符串长度

写法:string.length

例如:'\n\r\t'.length 值为3

通过下标可以读取字符(类似数组)

例如:let s='hello';s[0] //值为"h"

5、字符串拼接

写法:字符串 + 任何类型 = 拼接之后的新字符串

只要有字符串和其他类型相拼接,最终的结果是字符串类型。

1、字符串”相加” eg:’hello’ + ‘ ’ + ‘world’ = hello world

2、数值字符串”相加” eg:’100’ + ‘100’ = 100100

3、数值字符 串+ 数值 eg:’12’ + 12 = 1212 口诀:数值相加,字符相连

6、base64 转码

(一般用来隐藏招聘启事里的简历邮箱)

  • window.btoa 正常字符串转为base64编码的字符串

  • window.atob base64编码的字符串转为原来的字符串

image.png

三、布尔bool (true/false)

下列运算符会得到 bool 值

  • 否定运算 !value

  • 相等运算 1 == 21 != 23 === 43 !== 4

  • 比较运算 1 > 21 >= 23 < 43 <= 4

if语句 配 bool

if(value){...}else{...}

if 语句常常需要判断真假,如果value不是bool属性怎么办?

五个 falsy 值

  • undefined
  • null
  • 0
  • NaN
  • ''(空字符串) 这五个 falsy 值代表假的。(还有false)

四、undefined和null

undefined null 是两种空类型,区别如下:

声明变量但是没有赋值,默认值是undefined,不是null

函数没有return,那么默认return undefined,而不是 null

习惯上,非对象的空值写为undefined,把对象的空值写为 null

  • undefined 和数字型相加,输出结果是 NaN
  • null和数字型相加,输出结果为原本的数字

五、符号 symbool (很少用)

JS 中的 Symbol 是什么?

六、变量声明

三种声明方式:

var a=1  //过时
let a=1  //let 是新的更合理的方式,可声明局部变量
const a=1  //声明时必须赋值,且不能再更改

let声明和const 声明

  • 遵循块作用域,即使用范围不能超出 { };
  • 不能重复声明;
  • 可以赋值,也可以不赋值;
  • 必须先声明再使用,否则会报错;
  • 全局声明的let变量,不会变成window的属性。 const声明和let几乎一样,只有一条不一样:声明时就要赋值,且赋值后不能再改。

七、类型转换

1、number=> string

var n =1为例:

  • 方法一:String(n)
  • 方法二: n + ''(空字符串)

没有更改 n 的值,只是创造了新的值

2、stringr=> number

var s = '123'为例:

  • 方法一:Number(s)
  • 方法二:s-0
  • 方法三: +s
  • 方法四:parseInt(s) / parseFloat(s)

image.png

没有更改 s 的值,只是创造新的值。

3、x => bool

  • 方法一: Boolean(x)
  • 方法二: !!x
Boolena(1)  //ture
Boolena(0)  //false
!!1   //ture
!!0  //false

4、x => string

  • 方法1:String(x)

  • 方法2: x.toString()

    八、对象 object

定义:无序的数据集合,键值对的集合

写法

let obj = { 'name': 'frank', 'age': 18 }  //简单写法
let obj = new Object({'name': 'frank'})  //正规写法
console.log({ 'name': 'frank, 'age': 18 })
  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可省略,省略之后就只能写标识符
  • 就算引号省略了,键名也还是字符串(重要) 如何知道键是字符串呢?

Object.keys(obj)可以打印出obj的所有key。

  • 变量属性名 如何用变量做属性名 之前都是用常量做属性名
let a = 'name'
let obj = { a : 'frank'}      // 这样写,属性名为 'a'
let obj = { [a] : 'frank' }  // 这样写,属性名为 'name'

对比

  • 不加 [ ] 的属性名会自动变成字符串
  • 加了 [ ] 则会当做变量求值
  • 值如果不是字符串,则会自动变成字符串