ES6从入门到精通——解构赋值和字符串

解构赋值

解构赋值是对赋值运算符的扩展,主要针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

在解构中,有两部分参与:解构的源,解构赋值表达式的右边部分;解构的目标,解构赋值表达式的左边部分

1.数组的解构赋值

在解构数组的时候存在多种解构方法,如基本解构、嵌套解构、可忽略解构、不完全解构、剩余运算符解构、字符串结构、解构默认值等。具体解构实例如下:

//基本解构
let [a, b, c] = [1, 2, 3];
// a = 1  b = 2  c = 3

//嵌套解构
let [foo, [[bar], baz]] = [1, [[2], 3]];
//foo =  1  bar = 2  baz = 3

//可忽略解构
let [ , , third] = ["foo", "bar", "baz"];
//third = "baz"

//不完全解构
let [a, b] = [2,3,4]; 
// a = 2, b = 3

//剩余运算符解构
let [head, ...tail] = [1, 2, 3, 4];
//head = 1  tail = [2, 3, 4]

//字符串结构
let [a, b, c, d, e] = 'hello';

//解构默认值
let [a = 2] = [];
// a = 2
2.对象的解构赋值

对象的解构赋值和数组的解构赋值其实类似,但是数组的数组成员是有序的。而对象的属性则是无序的,变量必须与属性同名,才能取到正确的值。

//基本对象解构赋值
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'  bar = 'bbb'

//可忽略
let { bar } = { foo: 'aaa', bar: 'bbb' };
//   bar = 'bbb'

//可嵌套
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello' y = 'world'

//剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10  b = 20  rest = {c: 30, d: 40}

//解构默认值
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;

在使用解构赋值时,可以进行嵌套使用,将数组解构和对象解构联合使用,虽然是联合使用了,但是它们的使用规则还是不变。

字符串

1.模板字符串

模板字符串相当于加强版的字符串,用反引号 ` ,除了作为普通字符串,还可以用来定义多行字符串,还可以在字符串中加入变量和表达式。具体的用法如下:

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`

console.log(`string text line 1
string text line 2`);

// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

在使用模板字符串的时候需要注意,模板字符串中的换行和空格都是会被保留。

2.新增方法
String.fromCodePoint()

在ES5 中有一个String.fromCharCode()方法,用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于0xFFFF的字符,而String.fromCodePoint()可以识别大于0xFFFF的字符,当传入多个参数的时候它们会被合并成一个字符串返回。

String.fromCodePoint(0x20BB7)
// "𠮷"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true
includes(), startsWith(), endsWith()

includes(), startsWith(), endsWith()可以用来确定一个字符串是否包含在另一个字符串中,这三个方法都支持第二个参数,表示开始搜索的位置

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

这三个方法只返回布尔值,如果需要知道子串的位置,还是得用 indexOf 和 lastIndexOf 。

这三个方法如果传入了正则表达式而不是字符串,会抛出错误。而 indexOf 和 lastIndexOf 这两个方法,它们会将正则表达式转换为字符串并搜索它。

repeat()

repeat()方法返回一个新字符串,表示将原字符串重复n次。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

如果参数是小数,向下取整

console.log("Hello,".repeat(3.2));  // "Hello,Hello,Hello,"

如果参数是 0 至 -1 之间的小数,会进行取整运算,0 至 -1 之间的小数取整得到 -0 ,等同于 repeat 零次

console.log("Hello,".repeat(-0.5));  // "" 

如果参数是 NaN,等同于 repeat 零次

console.log("Hello,".repeat(NaN));  // "" 

如果参数是负数或者 Infinity ,会报错:

console.log("Hello,".repeat(-1));  
// RangeError: Invalid count value

console.log("Hello,".repeat(Infinity));  
// RangeError: Invalid count value

如果传入的参数是字符串,则会先将字符串转化为数字

console.log("Hello,".repeat("hh")); // ""
console.log("Hello,".repeat("2"));  // "Hello,Hello,"
padStart(),padEnd()

如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

  • padStart:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。
  • padEnd:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。

以上两个方法接受两个参数,第一个参数是指定生成的字符串的最小长度,第二个参数是用来补全的字符串。如果没有指定第二个参数,默认用空格填充。

console.log("h".padStart(5,"o"));  // "ooooh"
console.log("h".padEnd(5,"o"));    // "hoooo"
console.log("h".padStart(5));      // "    h"

如果指定的长度小于或者等于原字符串的长度,则返回原字符串:

console.log("hello".padStart(5,"A"));  // "hello"

如果原字符串加上补全字符串长度大于指定长度,则截去超出位数的补全字符串:

console.log("hello".padEnd(10,",world!"));  // "hello,worl"

常用于补全位数:

console.log("123".padStart(10,"0"));  // "0000000123"
trimStart(),trimEnd()

trimStart()trimEnd()这两个方法。它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。

const s = '  abc  ';

s.trim() // "abc"
s.trimStart() // "abc  "
s.trimEnd() // "  abc"

除了能消除空格键,这两个方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。

replaceAll()

可以一次性替换所有匹配,它的用法与replace()相同,返回一个新字符串,不会改变原字符串。

'aabbcc'.replaceAll('b', '_')
// 'aa__cc'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值