JavaScript 数据类型和运算符

171 阅读3分钟

JS中的数据类型

7种

数字    number
字符串  string
布尔    bool
符号    symbol
空      undefined
空      null
对象    object

下面不是数据类型
数组,函数,日期,属于object(对象)

布尔(boolean)

真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{}

JS的5个falsy值,相当于是假的,但又不是false的值

undefined,null,0,NaN,""

整个JS里只有6个假值  
undefined,null,0,NaN,"",false

数字number

整数         1
小数         0.1
科学计数法   1.23e4
八进制写法   0123或00123或0o123
十六进制写法 0x3F或0X3F
二进制写法   0b11或0B11

特殊值

0,正0,负0
都等于0,但有区别
Infinity(无穷大) +Infinity(正无穷大)-Infinity(负无穷大)

NaN(Not a Number)无法表示的数字,不知道的数字,也是数字

字符串string

写法

单引号, '你好'
双引号, "你好"
反引号, `你好` 

如果单引号包含了单引号怎么办?

错误写法
'it's ok'   JS引擎会认为 'it' 就结束了

正确写法
'it\'s ok'  
"it's ok"
`it's ok`

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

\'表示'
\"表示"
\n 表示换行
\r 表示回车
\t 表示tab制表符
\\表示 \
\uFFFF 表示对应的Unicode字符
\xFF 表示 前256个Unicode字符

多行字符串(如果想在字符串中回车)

使用反引号
let s=`内容
       内容
       内容`

字符串的长度(string.length)

'123'.length         3
'\n\r\t'.length      3
''.length            0
' '                  1

通过下标读取字符

string[index]       index从0开始
let s='hello'
s[0]        
'h'                 s[0]是第一个字符

index到length (index比length少1,因为从0开始)
let s='hello'
s[5]                undefined
s[4]                'o'

base64转码

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

window.btoa('123')
window.atob('MTIZ')

undefined 和 null

两种空类型,没有本质上的区别
如果一个变量声明了,但没有赋值,那么它的值就是undefined,而不是null
如果一个函数没有写return,那么JS会默认写return undefined,而不是null
前端程序员习惯上,把非对象的空值写为undefined,把对象的空值写为null,仅仅是习惯上

JS的变量声明

三种方式

var a=1
let a=1
const a=1
a=1  错误的,不是变量声明

区别
var是之前的,不好用的方式
let是新的,更合理的方式
const声明时,必须赋值,而且不能更改
a=1  是错误的

let声明

遵循块作用域,即使用范围不能超过{}
不能重复声明
可以赋值,也可以不赋值
必须先声明在使用,否则报错
全局声明的let 变量,不会变成window属性
for循环时有奇效

const声明

遵循块作用域,即使用范围不能超过{}
不能重复声明
声明时必须赋值,赋值后不能更改
必须先声明在使用,否则报错
全局声明的const 变量,不会变成window属性

变量声明

var a=1         指定值
var a=1         同时也指定了类型(数字)
a=2,a="字符串"  但是值和类型可以随意变换

name 和 'name' 的区别

name是变量,存放在(内存的不知道啥区),可以使任何东西,值可以变
'name'是字符串,常量,就是不变的量,'name'只能是'name'

类型转换

numbe=>string
string(n)
n+''       
前端用第二种

string=>number
Number(s)
parseIns(s)/parseFloat(s)
s-0          
前端用第三种

x=>bool
Boolean(x)
!!x             
前端用第二种

x=>string
string(x)
x.tostring()

详细资料点击:JavaScript