持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
目录
今日题
题目
var name = '蜘蛛侦探'
var age = 5
class Person {
constructor(name = '鲨鱼辣椒') {
this.name = name
}
sayName() {
console.log(this.name)
}
sayAge() {
var age = this ? this.age : 6
console.log(age)
}
}
var p = new Person('蜻蜓队长')
p.age = 7
var bar = p.sayAge
p.sayName()
bar()
分析
这是《JavaScript每日一题》专栏中第一次出现关于class的题目,所以我们所接触的这道题的难度不会太大,只会在基础的基础上再基础,下面开始分析题目。映入眼帘的就是两个由var声明的变量,这里我们要注意使用var声明的变量都含有哪些特性(会追加到window对象中...等)。然后是定义了一个Person类,关于class的特点,我们以后再具体考察,此处先掌握其使用,class中的constructor会初始化实例对象的name属性,而后又定义了sayName和sayAge两个方法,要注意这两个方法是定义在哪里的?是定义在Person的实例上还是Person的原型上,或者说是定义在Perosn本身上,这些都要搞明白。最后是使用new调用Person给了p,给p添加一个age属性,然后将p.sayAge赋值给了bar,随后调用bar,这里要搞清楚为什么要赋值给bar,而不是直接调用p.sayAge,这样做的目的是什么?
昨日题
题目
const content = `${{} && 'typeof'}${NaN && `false`}`
console.log(content)
答案
'typeofNaN'
解析
两行代码,应该是“有史以来”行数最少的一道每日一题了,但行数并不代表难度,这道题里里外外考察的知识点还是挺多的,下面就让我们来一起分析一下。模板字符串中包含{} && 'typeof'和NaN && 'false',我们在昨天的分析中已经说了两个口诀,那就是&&是“一假则假,全真则真”,||是“一真则真,全假则假”。在{} && 'typeof'中我们知道对象转为布尔值永远都是true,而字符串'typeof'转为布尔值也是true,所以符合“全真则真”,那么这个{} && 'typeof'是成立的,而它的返回值却不是true,而是'typeof',这是因为&&、||在条件成立的情况下会返回后者表达式的值,也就是说{} && 'typeof'的返回值为'typeof'。同样,由于NaN为false,所以符合“一假则假”,所以NaN && 'false'的返回值为NaN,而不是false,这是因为当&&、||在条件不成立的情况下,会返回不成立的那个值。
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!