持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
目录
今日题
题目
var person = {
lookFar: {
is: false
},
determined: function() {
var {is} = this.lookFar
is = !is
},
change: function() {
this.lookFar.is = !this.lookFar.is
},
getLookFar: function() {
console.log(this.lookFar.is)
},
}
person.getLookFar()
person.determined() // 下定决心
person.getLookFar()
person.determined() // 下定决心
person.getLookFar()
person.determined() // 下定决心
person.getLookFar()
person.change() // 只需改变一次
person.getLookFar()
分析
person
对象中包含lookFar
属性以及determined
、change
、getLookFar
方法,determined
通过解构赋值修改is
的值,而change
则是直接修改is
的值,getLookFar
则负责查看is
的值。本意是想就这道题说明一个道理:人不管下定多少次决心,其实都是无用论,最重要的是去改变。
言之易,行之难。——吕不韦《吕氏春秋·论·不苟论》
昨日题
题目
实现trim
方法,该方法可以清除字符串两侧空格,且不影响原字符串,而是返回一个新字符串。类似的方法还有trimStart
和trimEnd
,其原理大致一样,只不过一个是清除字符串左侧空格,一个是清除右侧空格
答案
无固定答案,下面仅展示部分写法:
String.prototype._trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, '')
}
console.log(' Hello JueJin '._trim())
解析
字符串的replace
方法可以接收一个正则表达式作为匹配内容,然后将匹配到的内容替换为传递的第二个参数,例如str.replace(reg, value)
则代表将str
中符合正则表达式reg
的部分替换为value
,并返回替换后的字符串,该操作不会影响原字符串。由于我们是实现一个trim
方法,所以最好要把这个自定义的方法写到String
的原型对象上,因为这样才能最大限度的polyill原生的trim
方法,而String.prototype._trim
的值是一个普通函数,而普通函数中的this
是调用者,也就是谁调用_trim
,_trim
中的this
就是谁,毫无疑问,本示例中的this
当然是' Hello JueJin '
,然后调用它的replace
方法通过正则表达式消除两侧空格,并返回新的字符串。关于这道题中的正则,再赘述几句,即/(^\s*)|(\s*$)
与/(^\s*)|(\s*$)/g
是不同的,前者匹配到一个符合的内容就会停止,而后者则是所有符合的内容都会被匹配到,因为后者使用了正则表达式的模式修饰符g
,所以应用全局匹配模式
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!