JS类型、值和变量

174 阅读4分钟

2.类型、值和变量

2.1 Javascript类型:

原始类型:字符串、布尔值、数值、undefined、null、symbol(符号类型)

对象类型:对象、数组、函数

2.2 数值

2.2.1 整数字面量

十六进制:0x或0X开头

八进制:0o或0O开头

二进制:0b或0B开头

2.2.2 浮点字面量

2.2.3 Javascript中的算术

主要包括Math函数  

Math.开头的函数

如Math.ceil(向上舍入)、Math.floor(向下舍入)、Math.pow(2,6)(求2的6次方)、Math.round(四舍五入)、Math.max(求最大值)、Math.min(求最小值)

Javascript中的一些运算准则: 上溢出、下溢出和被零除不会报错 正上溢出(Infinity)、负上溢出(-Infinity)、正下溢出(比最小可表示数值更接近0,则为0)、负下溢出(-0)

正零和负零相等,即使在严格模式下

被0除返回无穷或者负无穷

0除以 0结果为NaN

NaN与任何数值和非数值都不相等(两个NaN不相等)

所以不能用x===NaN来判断x的值是非数值,只能用(x!=x和Number.isNaN(x)来判断)

2.2.4 BigInt表示任意精度整数

表示方法:一串数字后面+小写字母n

BigInt()函数用于把数值或者字符串转换为BigInt值

BigInt(string)结果10n**100n

0==0n   true

0===0n   false

Math对象的人和函数不接受BigInt操作数

2.3 文本

2.3.1 字符串字面量

反斜杠的特殊用法

‘two\nlines’  写在一行但表示两行

‘one\

long\

line’  写在多行但只有一行

2.3.2 字符串API

S.length

S.substring(1,4)  第二到四个字符

S.slice(1,4)  s.slice(-3)  最后三个字符

S.indexOf(“a”)  搜索 第一个 a字符出现的位置,没找到返回-1

S.lastIndexOf(“a”) 搜索最后一个a出现的位置

ES6之后新增

s.startWith(“hello”)   s.endWith(“hello”) 字符串是不是以这些字符开头或结尾的

S.includes(“hello”)   s是不是包含该子串

S.replace(“a”,”b”)  用b替换a

S.toLowerCase()、S.toUpperCase() 全部转换为大写和小写字母

S.charAt(0) S[0] 获取字符串中指定位置的字符

“x”.padStart(3,””)、”x”.padEnd(3,””) 在左侧或者右侧填充字符使其长度变为3,如第二个参数省略,则用空格填充

“test”.trim()、”test”.trimStart()、”test”.trimEnd()  删除左右侧、左侧、右侧的空格

s.concat(“!”)  s+”!” 连接两个字符串

“2”.repeat(5)  重复5次

JS中的字符串不可修改,以上操作都返回一个新字符串

2.4 布尔值

假性值:false、undefined、null、’’、NaN、0、-0 在需要布尔值的地方返回false,其他返回true

但是undefined == false返回 false

2.5 null和undefined

typeof(null)  返回object

null==undefined   null!==undefined

2.6 全局对象

全局函数:isNaN()、parseInt()、eval()(?)

全局常量:undefined、Infinity、NaN

构造函数:Date()、RegExp()、String()、Object()、Array()

全局对象:Math、json

Node全局对象:global

浏览器:window

ES2020:Node和浏览器:globalThis

2.7 是否可修改

JS中undefined、null、布尔值、数值、字符串都不可修改

原字符串不可修改 ,对字符串操作之后会返回一个新字符串

对象和数组可以修改,而且是引用  把对象赋值给一个变量,是在赋值引用,不会创建对象的副本,复制数组可以使用Array.from创建副本而不是引用

image.png

2.8 类型转换

image.png

2.8.1 转换与相等

Undefined==null    true

Undefined==false    false

0==false  true(布尔值转换为数值0)

“0”==false  true(两个操作数都转换为0)

 

==操作符不会将其他操作数转换为布尔值

2.8.2 显示转换

显示转换为数值、字符串或者布尔值的三个函数Number()、String()、Boolean()

常用的隐式转换:

X+”” 转为字符串

+x  转为数值

X-0 转为数值

!!x 转为布尔值

 

数值向字符串的特殊转换,四舍五入

let n = 123456.789;

n.toFixed(m)  m指定的小数位数

n.toExponential(m) 转为科学计数法,小数点前1位,小数点后m位

n.toPrecision(m) 指定有效位数个数m

 

parseInt()、parseFloat()将字符串转为整数或者浮点数会忽略开头的空格和后面的无关字符,如果第一个字符是非空格非数值,则返回NaN

parse可以解析0x或0X开头的字符串

Number只能处理基数为10的,且不能处理后面为无关字符的

parseInt可以接受第二个参数,指定要解析的基数

如:parse(“077”,10)  77

parse(“077”,8)    63

2.9 对象到原始值转换

对象到布尔值的转换:所有对象都转为true

对象转为字符串:

image.png

2.10 变量声明与赋值

2.10.1 var、const和let

通过var实现的全局变量被实现为全局对象的属性,可以通过globalThis来引用(如 var x =10;等价于globalThis.x =10);通过const和let声明的变量不是全局对象的属性。

2.10.2 解构赋值