标签:poi text out ble NPU 用途 console 函数的参数 big
function move({x = 0, y = 0} = {}) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
// 返回一个数组
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
// 返回一个对象
function example() {
return {
foo: 1,
bar: 2
};
}
let { foo, bar } = example();
for...of
循环遍历for (let codePoint of ‘foo‘) {
console.log(codePoint)
}
<%...%>
放置JavaScript代码,使用<%= ... %>
输出JavaScript表达式let template = `
<ul>
<% for (let i = 0; i < data.supplies.length; i++) { %>
<li><%= data.supplies[i] %></li>
<% } %>
</ul>
`
let a = 5;
let b = 10;
function tag(s, v1, v2) {
console.log(s[0]);
console.log(s[1]);
console.log(s[2]);
console.log(v1);
console.log(v2);
return ‘OK‘;
}
tag`Hello ${ a + b } world ${ a * b }`;
// "Hello "
// " world "
// ""
// 15
// 50
// "OK"
codePointAt()
方法是测试一个字符由两个字节还是由四个字节组成的最简单方法includes()
、startsWith()
和endsWith()
padStart()
用于头部补全,padEnd()
用于尾部补全trimStart()
和trimEnd()
两个方法,用于消除空格u
修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF
的Unicode字符。利用这一点,可以写出一个正确返回字符串长度的函数function codePointLength(text) {
var result = text.match(/[\s\S]/gu);
return result ? result.length : 0;
}
var s = ‘????‘;
s.length // 4
codePointLength(s) // 2
y
修饰符,它的设计本意就是让头部匹配的标志^
在全局匹配中都有效dotAll
模式,即点(dot)代表一切字符x
只有在y
前面才匹配,必须写成/x(?=y)/
,先行否定断言指的是,x
只有不在y
前面才匹配,必须写成/x(?!y)/
。后行断言正好相反,x
只有在y
后面才匹配,必须写成/(?<=y)x/
。后行否定断言指的是x
只有不在y
后面才匹配,必须写成/(?<!y)x/
,下面是几个例子:/\d+(?=%)/.exec(‘100% of US presidents have been male‘) // [‘100‘]
/\d+(?!%)/.exec(‘that\‘s all 44 of them‘) // [‘44‘]
/(?<=\$)\d+/.exec(‘Benjamin Franklin is on the $100 bill‘) // [‘100‘]
/(?<!\$)\d+/.exec(‘it\‘s worth about €90‘) // [‘90‘]
\p{...}
和\P{...}
,允许正则表达式匹配符合Unicode某种属性的所有字符$<组名>
引用具名组const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const matchObj = RE_DATE.exec(‘1999-12-31‘);
const year = matchObj.groups.year; // 1999
const month = matchObj.groups.month; // 12
const day = matchObj.groups.day; // 31
Number
对象上,新提供了Number.isFinite()
和Number.isNaN()
两个方法Number.EPSILON
可以用来设置“能够接受的误差范围”,它的实质是一个可以接受的最小误差范围function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true
**
),它的一个特点是右结合,而不是常见的左结合let x = 99;
function foo(p = x + 1) {
console.log(p);
}
foo() // 100
x = 100;
foo() // 101
// 写法一
// 函数参数默认值是空对象,但是设置了对象解构赋值的默认值
function m1({x = 0, y = 0} = {}) {
return [x, y];
}
// 写法二
// 函数参数默认值是有具体属性的对象,但是没有设置对象解构赋值的默认值
function m2({x, y} = {x: 0, y: 0}) {
return [x, y];
}
// 函数没有参数的时候
m1() // [0, 0]
m2() // [0, 0]
// x和y都有值的时候
m1({x: 3, y: 8}) // [3, 8]
m2({x: 3, y: 8}) // [3, 8]
// x有值,y无值的情况
m1({x: 3}) // [3, 0]
m2({x: 3}) // [3, undefined]
// x和y都无值的情况
m1({}) // [0, 0]
m2({}) // [undefined, undefined]
m1({z: 3}) // [0, 0]
m2({z: 3}) // [undefined, undefined]
...变量名
),用于获取函数的多余参数,这样就不需要使用arguments
对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中this
对象,就是定义时所在的对象,而不是使用时所在的对象。this
对象的指向是可变的,但是在箭头函数中,它是固定的
- 定义对象的方法,且该方法内部包括
this
- 需要动态this的时候
...
)。它好比rest参数的逆运算,将一个数组转为用逗号分割的参数序列。它主要用于函数调用function push(array, ...items) {
array.push(...items);
}
function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
[...‘hello‘]
。这有一个重要的好处,那就是能够正确识别四个字节的Unicode字符Array.from
方法支持类似数组的对象和没有部署遍历器接口(Symbol.iterator
)的对象。这些对象都可以通过Array.from
方法转为数组,而此时扩展运算符就无法转换indexOf
方法无法识别数组的NaN
成员,但是findIndex
方法可以借助Object.is
方法左到:[NaN].indexOf(NaN)
// -1
[NaN].findIndex(y => Object.is(NaN, y))
// 0
undefined
Array.prototype.sort()
的默认排序算法必须稳定。这个规定已经做到了,现在JavaScript各个主要实现的默认排序算法都是稳定的super
,指向当前对象的原型对象let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }
x // 1
y // 2
z // { a:3, b: 4 }
Object.assign()
方法// 写法一
const clone1 = {
__proto__: Object.getPrototypeOf(obj),
...obj
}
// 写法二
const clone2 = Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
);
// 写法三
const clone3 = Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)
get
,这个函数是会执行的?.
,简化层层运算const firstName = message?.body?.user?.firstName || ‘default‘;
const fooValue = myForm.querySelector(‘input[name=foo]‘)?.value;
Object.assign()
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)Object.getOwnPropertyDescriptors()
方法的引入目的,主要是为了解决Object.assign()
无法正确拷贝get
属性和set
属性的问题。它配合Object.defineProperties()
方法就可以实现正确拷贝const shallowMerge = (target, source) => Object.defineProperties(
target,
Object.getOwnPropertyDescriptors(source)
);
Object.getOwnPropertyDescriptors()
方法的另一个用途,是配合Object.create()
方法,将对象属性克隆到一个新对象,这属于浅拷贝const shallowClone = (obj) => Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)
标签:poi text out ble NPU 用途 console 函数的参数 big
原文地址:https://www.cnblogs.com/Akatsuki-Sanjou/p/12959272.html