JS数据类型

一、JS中的数据类型有7种

1.数字 number

2.字符串 string

3.布尔 bool

4.符号 symbol

5.空 undefined

6.空 null

7.对象 object


1.数字 number 

写法

整数写法:1

小数写法:0.1

科学计数法:1.23e4

八进制写法(用得少):0123或00123或0o123

十六进制写法:0x3F或0X3F

二进制写法:0b11或0B11 

特殊值

正0和负0:都等于0,要严谨

无穷大:Infinity、+Infinity、-Infinity

无法表示的数字:NaN(Not a Number),但它是一个数字:isNaN()可以判断一个数是否为NaN,是返回false,不是返回true


2.字符串 string  每个字符两个字节(阉割版的utf-8)


写法

单引号:'你好'

双引号:'你好'

反引号:`你好` 

注意:引号不属于字符串的一部分,就像书名号不属于书名的一部分一样

这里我们来看下转义,也就是用另一种方法表达你想要写的东西

\ '表示'

\ "表示"

\n 表示换行

\r 表示回车

\t 表示tab制表符

\\ 表示 \

\uFFFF 表示对应的Unicode字符

\xFF 表示前256个Unicode字符

错误写法

'it's ok'

JS引擎会认为'it'就结束了,后面的看不懂

正确写法

'it\'s' ok'  // 这就是转义

"it's ok"

`it's ok`

多行字符串(如果想在字符串里回车,用反引号很容易做到)

let s = `这里是

可以的

用反引号很容易做到`

字符串的长度

String.length

'123'.length // 3

'\n\r\t'.length // 3

''.length // 0

' '.length // 1

通过下标读取字符

String[index]

let s = 'hello',

s[0] // 'h'

注意index从0开始

s[0] 是第一个字符

注意index到length

let s = 'hello'

s[5] // undefined, 居然不报错

s[4] // '0'

base64转码(一般用来隐藏招聘启事里的简历)

windows.btoa

正常字符串转为Base64编码的字符串

windows.atob

Base64编码的字符串 转为原来的字符串

3.布尔 bool

只有两个值 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、''

4.符号 symbol

不怎么常用的数据类型

5.空 undefined & 6.空 null

区别

-没有本质区别

-细节一:如果一个变量声明了,但是没有赋值,那么默认值就是undefined,而不是null

-细节二:如果一个函数,没有写return,那么默认return undefined,而不是null

-细节三:前端程序员习惯上,把非对象的空值写成undefined,把对象的空值写成null,但这仅仅是习惯上的

--------------------------------------------------------------------------------------------

判断数据的类型 typeof

var num = 10; console.log(typeof num); // number

var str = 'william'; console.log(typeof str); // string

var william = true; console.log(typeof william); // boolean

var a = undefined; console.log(typeof a); // undefined

var b = null; console.log(typeof b); // object

--------------------------------------------------------------------------------------------

7.对象 object

见JS对象博客

https://www.jianshu.com/p/aff130d82bb0

二、类型转换

number=>string

String(n)

n+'' (更简单)

string=>number

Number(s)

parseInt(s) // 取整数

parseFloat(s) // 可以是小数

s-0 

+s 

x=>bool // 把任何一个东西变为布尔

Boolean(x)

!!x (更简单)

x=>string

String(x)

x.toString()

如:(1).toString

三、变量声明

三种声明方式

var a = 1

let a = 1

const a = 1

a = 1

区别

var是过时的,不好用的方式

let是新的,更合理的方式

const是声明书必须赋值,且不能再改的方式

最后这种方式是错的,不准这样声明

var声明

直接跳过,写代码不用

let声明

规则

遵循块作用域,即使用范围不能超出{}

不能重复声明

可以赋值,也可以不赋值

必须先声明再使用,否则报错

全局声明的let变量,不会变成windows属性

for循环配合let有奇效

const声明

规则

跟let几乎一样

只有一条不一样:声明时就要赋值,赋值后不能改

变量声明

指定值:var a = 1

同时也指定了类型:var a = 1

但是值和类型都可以随意变化:a = 2  /  a = '字符串'

name和'name'的区别

name是变量,值可以变,可以是'name',也可以是'hello'

'name'是字符串常量,常量就是不变量,'name'只能是'name',不能是其他值