字符串新增方法
如何判断字符s
是在字符huasheng
中呢
let str = 'huasheng';//es5中通过序列号判断在不在当前字符串当中
console.log(str.indexOf('s')===-1);
如果是true
是不在指定字符中,如果false
是在指定字符当中
indexOf
方法是查看指定字符在字符串中的序列号,如果不在字符串中那就是-1
(默认不在当前指定字符的位置)
false
表示在当前指定的字符串当中
let str = 'huasheng';
console.log(str.includes('s')); //includes是包括包含的意思,查看str包不包含字符s
let str = 'huasheng';
console.log(str.includes('s',1));
这个表示从索引1
这个位置,开始查看有没有字符s
,第二个参数默认就是0
,从索引0
项开始查看字符s
判断字符串中有没有指定字符 ,str.includes(指定字符,索引位置)
从指定索引位置查看有没有指定字符(这个记一下)
- 如果返回值是
true
说明指定字符在str
中 - 如果返回值是
false
说明指定字符不在str
中
let str = 'huasheng';
console.log(str.startsWith('h'));//当前字符串是以h开头的结果是true
console.log(str.startsWith('u'));//当前字符串不是以u开头的结果是false
console.log(str.startsWith('huasheng'));//当前字符串是以huasheng开头的结果是true
console.log(str.startsWith('huag'));//当前字符串不是以huag开头的结果是false
你只要确保指定开头的字符是和字符串开头的字符是一致即可(可以匹配多个但是一定要保证一致)
str.startsWith(指定字符,索引位置)
判断str是否以指定字符串开头
- 如果是以指定字符开头,那么返回值是
true
- 如果不是以指定字符开头,那么返回值是
false
let str = 'huasheng';
console.log(str.endsWith('g'));//他是以字符g结尾的,返回结果是true
console.log(str.endsWith('h'));//他不是以字符h结尾的,返回结果是false
console.log(str.endsWith('huasheng'));//他是以字符huasheng结尾的,返回结果是true
你只要确保指定结尾的字符是和字符串结尾的字符是一致即可(可以匹配多个但是一定要保证一致)
str.endsWith(指定字符,索引位置)
判断str
是否以指定字符串结尾
- 如果是以指定字符结尾,那么返回值是
true
- 如果不是以指定字符结尾,那么返回值是
false
let str = 'huasheng';
console.log(str.includes('u',1));
//表示是从索引1这个位置,开始有字符u表示true反之是false
console.log(str.startsWith('u',1));
//表示是从索引1这个位置开始,检查是不是字符u开头是表示true不是表示false
console.log(str.endsWith('g',8));
//表示是从索引1这个位置开始,检查是不是字符g结尾是表示true不是表示false
以上三个函数都支持第二个参数n
, 表示从索引n
开始检索字符串
let str = 'huasheng';
console.log(str.repeat(3));//repeat表示重复的意思,让当前字符串重复3次
str.repeat(n)
返回的是一个把str重复n次的新字符串
let str1 = 'x';
console.log(str1.padStart(4,'a'));
//pad其实是padding的简写 其实他原本的意义叫做填充
第一次参数是length
表示填充,str
字符串length
有多长
第二个参数指定字符,用a
填使得最终str
长度是4
(从前面字符x
开始填到指定字符的length
)
let str1 = 'x';
console.log(str1.padStart(4,'huasheng'));
//他会用前面的字符填充所需的length的长度
console.log(str1.padStart(4))
//第二个参数不写着是用空格来填充当前字符属性的length的长度
console.log(str1.padStart(4,''));
//个参数是''表示用没有填充还是原本的字符
str.padStart(length,指定字符串)
用指定字符串从str前面把str填充到指定的length
console.log(str1.padEnd(5,'b'));
//从后面开始填充字符,用字符'b'开始填充到字符length长度,让字符串最终length长度是5
str.padEnd(length,指定字符串)
用指定字符串从str后面把str填充到指定的length
模板字符串
es5
在处理字符串的不足:多行字符串,只能使用+
号拼接es6
使用模板字符串解决了这个问题
var str = 'huasheng';//当前这个是单行字符串
var str = 'dbdh
widhcsaic
';//不能用''来包裹着多行字符串的否则会报错
es5
两个''
单引号,他只能包裹着不换行的字符串(单行字符串)''
或者""
只能存放着单行字符串,如果想多行那么就会报错(es5不行那么我es6来解决)
那么就可以用es6
的模板字符串来解决这个问题
ar str = `我是
时食醋华cdfvb
`;//``这个叫做模板字符串
console.log(str);
这就是es6
新增的模板字符串的好处(新增的方式),这种方式的好处他可以保留里面的空格和换行,都是可以的依然让字符串有效
模板字符串的用处
let {name,age} = {name:'huasheng',age:28};
//这个是对象的解构赋值声明变量name存储值huasheng,声明了变量age存储值28
let str = '我的名字' + name + ',年龄' + age;
console.log(str)
这是es5
的字符串拼接,当你一个字符串想拼到一个变量的话你得要用+
号.
当前字符串的拼接是有点麻烦的,现在只是拼接了两个变量,那么如果你要拼接多个变量呢,那就会很麻烦变量拼接过多,有可以拼错的可能性(字符串拼接很容易出错的)
用模板字符串来实现字符串和变量拼接的效果
let {name,age} = {name:'huasheng',age:28};
let str = `我的名字是${name},年龄是${age}`;
console.log(str)
当你需要在``模板字符串中使用变量的时候不需要拼接了,现在只要用${变量}
就可以了这样的话比较简单
模板字符串的特点
- 字符串中的空格和缩进会被保存在字符串中
- 字符串中如果需要嵌入变量,直接在字符串中写${变量名}就可以了
数字的新增方法
如何让一个数字,转换成二进制,八进制,十六机制的数呢??
8进制数字的写法
let num = 085;//数字前面加0,表示10是8进制的10 1*8^1 + 0*8^0 = 8
console.log(num);
转换成八进制:系数先看第一个是1就是1*8 ^ 1
在加上后面的系数0就是0*8^ 0
,那就是等于8
let num = 019;
console.log(num);
在8进制中只有(0 1 2 3 4 5 6 7 8)
8个数字,如果写019
转换成八进制的话,那么不会转换成8进制的他会默认转换成十进制
2进制数字的写法
let num = 0b10;//数字前面加0b表示二进制的数字 1*2^1 + 0*2^0 = 2
console.log(num);
let num = 0b1010;//数字前面加0b表示二进制的数字 1*2^3 + 0*2^2 + 1*2^1 + 0*2^1 = 10
console.log(num);
在二进制中只有(0 1)
2个数字,如果写019
转换成二进制的话,那么他会报错
16进制数字的写法
let num = 0x10;//数字前面加0x表示十六进制的数字,结果就是16
console.log(num);
Number.isNaN(数字)
判断数字是否是NaN
console.log(window.isNaN(NaN));
是NaN
表示true
,在es5
中是判断一个数字是不是NaN
onsole.log(window.isNaN);
console.log(window.isNaN===isNaN);
这两个是一个东西,结果是true
isNaN
是这个函数也是自动挂在全局window
对象当中的
console.log(window.isNaN===Number.isNaN);
当然不等于,一个是挂在全局window
对象上面的属性,一个是Number
构造函数内置的函数,结果是false
表示不相等
console.log(Number.isNaN('d'));
表示false
不是一个NaN
Number.isNaN(数字)
判断数字是否是NaN
注:在判断其他数据类型时不会类型转换
- 如果使用
Number.isNaN
判断出来的结果是,true
的话表示是一个NaN
- 如果使用
Number.isNaN
判断出来的结果是,false
的话表示不是一个NaN
Number.isFinite(数字)
判断数字是否是有限的
console.log(Number.isFinite(2));
打印结果是true
console.log(Number.isFinite(Math.PI));
打印结果是true
,在数学中π是无限的,但是在JS中π就是有限小数了(3.141592653589793)
console.log(typeof Infinity);
检查结果是number
表示是一个数字,他是一个关键词,是一个数字表示无限数字( 表示正无穷)
console.log(Number.isFinite(Infinity))
;打印结果是false
表示Infinity
(正无穷关键词是无限数字)
console.log(Number.isFinite(-Infinity));
打印结果是false
表示-Infinity
(关键词是负无穷)
Infinity
这个关键词 表示正无穷 (这个要记)-Infinity
表示负无穷 (这个要记)
Number.isInteger(数字)
判断数字是不是整数
console.log(Number.isInteger(1.23));//false表示不是一个整数
console.log(Number.isInteger(1));//true表示是一个整数
Number.isInteger(数字)
判断数字是不是整数 注:在判断其他数据类型时不会类型转换
- 如果返回结果是
true
,那么就是整数 - 如果返回结果是
false
,那么就不是整数
Number.parseInt(数字)
同parseInt
方法一样
Number.parseFloat(数字)
同parseFloat
方法一样
Math
对象的新增方法
Math.trunc(数字)
用于去除数字中的小数,返回整数部分
console.log(Math.trunc(1.123));
打印1,去处小数的小数位/得到小数的整数位(不写数字这值是NaN
)
Math.sign(数字)
用于判断数字是否是正数,负数或者0
console.log(Math.sign(234));//数字是正数 返回1
console.log(Math.sign(-45));//数字是负数 返回-1
console.log(Math.sign(0));//数字是0 返回0
console.log(Math.sign(-0));//数字是-0 返回-0
console.log(Math.sign('sdf'));//其他数字 返回NaN
12.234
这是一个小数,那么我怎么才能得到这个小数呢
console.log(~~12.234)//打印12
~~数字
返回小数的整数部分
Math.cbrt(数字)
计算数字的立方根在这里插入代码片
console.log(Math.cbrt(27));//打印3
Math.hypot(数字1,数字2,…)
计算每个实参的平方和的平方根(这个要记)
console.log(Math.hypot(3,4));//打印5
//勾股定理 (90°)
//勾股数 3 4 5
//如果你知道直角边3 也知道直角边4
//那么你们另一个数是5(斜边是5)知道两个斜角边等到一个斜角边
指数运算符
//x ** y x的y次方
console.log(2**3);//这个表示2的3次方
console.log(27**(1/3))//这个表示27的1/3次方