做完这道题也许你会有所思考

230 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

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属性以及determinedchangegetLookFar方法,determined通过解构赋值修改is的值,而change则是直接修改is的值,getLookFar则负责查看is的值。本意是想就这道题说明一个道理:人不管下定多少次决心,其实都是无用论,最重要的是去改变。

言之易,行之难。——吕不韦《吕氏春秋·论·不苟论》

昨日题

题目

实现trim方法,该方法可以清除字符串两侧空格,且不影响原字符串,而是返回一个新字符串。类似的方法还有trimStarttrimEnd,其原理大致一样,只不过一个是清除字符串左侧空格,一个是清除右侧空格

答案

无固定答案,下面仅展示部分写法:

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每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!