<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
1.每个Symbol都是完全唯一的。传递给Symbol的参数只是给Symbol的一个描述。Symbol的值不依赖于传递的参数。当我们测试相等时,我们创建了两个全新的符号:第一个Symbol('foo'),第二个Symbol('foo'),
这两个值是唯一的,彼此不相等,因此返回false
</div>
<div>
2.reducer 函数接收4个参数:
<p>Accumulator (acc) (累计器)</p>
<p>Current Value (cur) (当前值)</p>
<p>Current Index (idx) (当前索引)</p>
<p>Source Array (src) (源数组)</p>
reducer 函数的返回值将会分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。
reducer 函数还有一个可选参数initialValue, 该参数将作为第一次调用回调函数时的第一个参数的值。如果没有提供initialValue,则将使用数组中的第一个元素。
在上述例子,reduce方法接收的第一个参数(Accumulator)是x, 第二个参数(Current Value)是y。
在第一次调用时,累加器x为1,当前值“y”为2,打印出累加器和当前值:1和2。
例子中我们的回调函数没有返回任何值,只是打印累加器的值和当前值。如果函数没有返回值,则默认返回undefined。在下一次调用时,累加器为undefined,当前值为“3”, 因此undefined和3被打印出。
在第四次调用时,回调函数依然没有返回值。累加器再次为 undefined ,当前值为“4”。undefined和4被打印出
</div>
<div>
3.一元操作符 ++ 先返回 操作值, 再累加 操作值。num1的值是10, 因为increaseNumber函数首先返回num的值,也就是10,随后再进行 num的累加。
num2是10因为我们将 num1传入increasePassedNumber. number等于10(num1的值。同样道理,++ 先返回 操作值, 再累加 操作值。) number是10,所以num2也是10.
</div>
<div>
4.JSON.stringify的第二个参数是 替代者(replacer). 替代者(replacer)可以是个函数或数组,用以控制哪些值如何被转换为字符串。
如果替代者(replacer)是个 数组 ,那么就只有包含在数组中的属性将会被转化为字符串。在本例中,只有名为"level" 和 "health" 的属性被包括进来, "username"则被排除在外。data 就等于
"{"level":19, "health":90}".
而如果替代者(replacer)是个
函数,这个函数将被对象的每个属性都调用一遍。函数返回的值会成为这个属性的值,最终体现在转化后的JSON字符串中(译者注:Chrome下,经过实验,如果所有属性均返回同一个值的时候有异常,会直接将返回值作为结果输出而不会输出JSON字符串),而如果返回值为undefined,则该属性会被排除在外。
</div>
<div>
5.解构赋值
</div>
<div>
6.delete操作符返回一个布尔值:true指删除成功,否则返回false. 但是通过 var, const 或 let 关键字声明的变量无法用 delete 操作符来删除。
name变量由const关键字声明,所以删除不成功:返回 false. 而我们设定age等于21时,我们实际上添加了一个名为age的属性给全局对象。对象中的属性是可以删除的,全局对象也是如此,所以delete
age返回true.
</div>
<div>
7.Set对象是独一无二的值的集合:也就是说同一个值在其中仅出现一次。
我们传入了数组[1, 1, 2, 3, 4],他有一个重复值1.以为一个集合里不能有两个重复的值,其中一个就被移除了。所以结果是 {1, 2, 3, 4}
</div>
<script>
console.log('第1题')
console.log(Number(2) === Number(2))
console.log(Boolean(false) === Boolean(false))
console.log(Symbol('foo') === Symbol('foo'))
console.log('第2题')
let arr = [1, 2, 3, 4]
arr.reduce((x, y) => console.log(x, y));
console.log('第3题')
let num = 10;
const increaseNumber = () => num++;
const increasePassedNumber = number => number++;
const num1 = increaseNumber();
const num2 = increasePassedNumber(num1);
console.log(num1);
console.log(num2);
console.log('第4题')
const settings = {
username: "lydiahallie",
level: 19,
health: 90
};
const data = JSON.stringify(settings, ["level", "health"]);
console.log(data);
console.log('第5题')
const numbers = [1, 2, 3, 4, 5];
const [y] = numbers;
console.log(y);
console.log('第6题')
const name = "Lydia";
age = 21;
console.log(delete name);
console.log(delete age);
console.log('第7题')
const set = new Set([1, 1, 2, 3, 4]);
console.log(set);
const person = { name: 'Lydia' }
function sayHi(age) {
console.log(`${this.name} is ${age}`)
}
sayHi.call(person, 211)
sayHi.bind(person, 21)
function sayHi() {
return (() => 0)()
}
console.log(typeof sayHi())
const numbers1 = [1, 2, 3]
numbers1[10] = 11
console.log(numbers1)
console.log(numbers1[4])
// (() => {
// let x, y
// try {
// throw new Error()
// } catch (x) {
// (x = 1), (y = 2)
// alert(x)
// }
// console.log(x)
// console.log(y)
// })()
// [[0, 1], [2, 3]].reduce(
// (acc, cur) => {
// return acc.concat(cur)
// },
// [1, 2]
// )
console.log("🥑" + "💻");
const name1 = "Lydia Hallie"
console.log(name1.padStart(13))
console.log(name1.padStart(2))
</script>
<style>
div {
margin-bottom: 20px;
}
</style>
</body>
</html>
···
2021-03-29 javascript 每日一题分享
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 日本作家松浦弥太郎说:“人的一生有两个生日,一个是诞生日,一个是真正理解自己的日子”。按照这个说法,我也有...
- LeetCode上最小体力消耗路径[https://leetcode-cn.com/problems/path-w...
- 每日英语学习 Mobile phones have changed the way we communicate,...
- 书摘 例外常会与愿景、目标有所联结,常是解决之道的前驱之身或重要改变的关键。莫忘记,当发现了当事人的小小例外是,咨...