写一个方法去掉字符串中的空格,要求传入不同的类型分别能去掉前、后、前后、中间的空格

31 篇文章 0 订阅
20 篇文章 1 订阅

目录

1、 Symbol

2、Object.freeze()

3、正则表达式的一些规则

4、实现方法


1、 Symbol

ES5中包含5种原始类型:字符串、数字、布尔值、null和undefined

ES6引入了第6种原始类型——Symbol

凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突

Symbol是原始值,ES6扩展了typeof操作符,返回"symbol"。

所以可以用typeof来检测变量是否为symbol类型

let name = Symbol('name');
let say = Symbol('say');
let obj = {
  // 使用变量作为对象属性的名称,必须加上中括号
  [name]: '草莓1',
  [say]: function() {
    console.log('say')
  }
}
obj.name = '草莓2';
obj[Symbol('name')] = '草莓3'

console.log(obj) 

打印结果:

{
    name: '草莓2',
    Symbol('name'): '草莓1',
    Symbol('name'): '草莓3',
    Symbol('say'): function() {
        console.log('say')
    }
}

 

2、Object.freeze()

Object.freeze() 方法可以冻结一个对象,一个被冻结的对象再也不能被修改。

被冻结的对象有以下几个特性:

  • 不能添加新属性
  • 不能删除已有属性
  • 不能修改已有属性的值
  • 不能修改原型
  • 不能修改已有属性的可枚举性、可配置性、可写性
var obj = {
    name: '小草莓',
    age: 18,
    address: '广东'
}
obj.__proto__.habit = '睡觉'
 
// 冻结对象
Object.freeze(obj)
 
// 不能添加新属性
obj.sex = '女'
console.log(obj) // { name: "小草莓", age: 18, address: "广东" }
 
// 不能删除原有属性
delete obj.age
console.log(obj) // { name: "小草莓", age: 18, address: "广东" }
 
// 不能修改已有属性的值
obj.name = '小草莓2号'
console.log(obj) // { name: "小草莓", age: 18, address: "广东" }
 
// 不能修改原型
obj.__proto__ = '随便什么值'
console.log(obj.__proto__)  
// { habit: "睡觉", constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, …}
 
// 不能修改已有属性的可枚举性、可配置性、可写性
Object.defineProperty(obj, 'address', { 
    enumerable: false,
    configurable: false,
    writable: true
}) // TypeError: Cannot redefine property: address

 

3、正则表达式的一些规则

^        匹配输入字符串的开始位置

\s       匹配任何空白字符,包括空格、制表符、换页符等

+        匹配前面的子表达式一次或多次

$        匹配输入字符串的结尾位置

\w      匹配包含下划线的所有字母和数字,与 [a-zA-Z0-9_] 等价

第一个 / 表示正则表达式的开始 

最后一个 /g 是全局匹配模式(匹配在整个字符串都有效)

4、实现方法

/^\s+/           一次或多次匹配字符串开始位置任何空白字符

/\s+$/           一次或多次匹配字符串结束位置任何空白字符

/\w\s+\w/      一次或多次匹配字符串中所有字母和数字中间的任何空白字符

/\s/g             全局匹配任何空白字符

$1$3           对应正则表达式的第一个和第三个匹配结果 

// 去掉空格
var POSITION = Object.freeze({
    left: Symbol(),
    right: Symbol(),
    both: Symbol(),
    center: Symbol(),
    all: Symbol()
})

/*
* str 字符串
  position 要去除哪个位置的位置
*/
function trim(str, position = POSITION.both) {
    switch (position) {
        // 左边
        case POSITION.left:
            str = str.replace(/^\s+/, '')
            break

        // 右边
        case POSITION.right:
            str = str.replace(/\s+$/, '')
            break
        
        // 左边和右边
        case POSITION.both:
            str = str.replace(/^\s+/, '').replace(/\s+$/, '')
            break

        // 中间
        case POSITION.center:
            while (str.match(/\w\s+\w/)) {
                str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)
            }
            break

        // 全部
        case POSITION.all:
            str = str.replace(/\s/g, '')
            break
    }
    return str
}

打印结果:

var str = trim(' s  t  r ', POSITION.left)
console.log(`|${str}|`) // |s  t  r |

var str = trim(' s  t  r ', POSITION.right)
console.log(`|${str}|`) // | s  t  r|

var str = trim(' s  t  r ', POSITION.both)
console.log(`|${str}|`) // |s  t  r|

var str = trim(' s  t  r ', POSITION.center)
console.log(`|${str}|`) // | str |

var str = trim(' s  t  r ', POSITION.all)
console.log(`|${str}|`) // |str|

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值