JavaScript - Day7 - es5和字符串

一、es5

        js在产生的时候,年代比较早,当时的web需求比较少,所以刚开始的js功能比较少,语法没有特别严谨。随着时代的发展和web应用的普及,js需要更多的功能,以及更严谨的语法,所以,js会有版本的升级。第一版的js是ECMA一开始统一了标准以后的版本。我们现在的所使用的语法,大多是ECMAScript版本3的语法,简称es3。到目前为止,已经有了es7,8,9,甚至es10 的版本了。近几年,基本每年都会有新的版本更新。

       每个版本的更新,都需要浏览器支持才能运行,但浏览器不会在js更新之后,立马更新。所以有的版本出来之后,需要在很长时间之后,浏览器才会兼容他。到目前为止,我们公认,es5是兼容性最好的版本。

        es5比起我们所正在使用的es3,语法没有什么变化,增加了一个严格模式,还有一些数组的方法。

1.概念

    (1)ECMAScript的第5个版本

    (2)他是公认的兼容性最好的版本

    (3)我们将来的项目,真正去运行的代码是es5的代码

2.严格模式

    (1)概念

                 由于js的作用域和隐式声明变量等语法会造成很多预想不到的错误,所以ES5中新增了一个严格模式的语法,用于严格规范代码的书写。 严格模式就是对不合理的语法进行严格的约束

    (2)使用语法

                 字符串 - 'use strict'

                           1.写在全局的顶部 ----- 可以约束整个页面

                           2.写在局部的顶部 ----- 只能约束局部代码

                 要放在代码的最前面,也就是在script标签中的第一行或者某个函数中的第一行,否则会失效;严格模式可以规范当前script标签或者当前函数中的代码,不能规范别的script标签中的代码和别的函数

    (3)约束了哪些

                 1.不允许省略var定义变量

                 2.不允许形参同名

                 3.不允许普通函数中的this代表window       

    (4)this关键字

                 在js中有一个关键字叫this,this关键字是代表一个变量的,在不同的作用域中代表的值是不一样的

                         1.全局的this - window

                         2.非严格模式下普通函数中固定this - window

                         3.严格模式下的普通函数中的this - undefined

    (5)严格模式优点

                 1.消除了一些不合理的语法,规避了未知的错误

                 2.代码更规范了,运行效率更高了

二、字符串

1.重新认识

    (1)字符串可以取下标 - 有下标就可以进行遍历

    (2)字符串有length长度,字符串中的length不允许改

    (3)字符串是只读数据,不允许修改、删除、添加字符

2.比较

    (1)字符串的比较规则是逐字符比较

                 字符串能比较大小,中文汉字也是字符串,中文汉字也能比较大小:

console.log('我'>'你') // true
console.log('你'>'我') // false

                 中文汉字的大小由unicode来决定。

                 阿斯克码总共128个,包含符号、大小写英文字母、数字。阿斯克码是由美国人创建的,所以对于英文的支持非常好。后来随着计算机的普及,各个国家在使用计算机的时候,没办法使用本国文字,这样用起来非常困难。所以众多国家的科学家一起制定了一个更大的对照表,包含各个国家的文字符号,所以称之为万国码,也叫作unicode。

                 其实unicode就是更大的阿斯克码。

    (2)大小由阿斯克码决定 

                 0~9 -------- 48~57

                 A~Z ------- 65~90

                 a~z -------- 97~122

    (3)字符串方法

                 1.charAt - 通过指定下标获取到对应的字符

                    语法:字符串.charAt(下标) - 返回字符

                 2.charCodeAt - 通过指定下标获取到对应字符的阿斯克码

                    语法:字符串.charCodeAt(下标) - 返回字符对应的阿斯克码

                 3.String.fromCharCode - 通过指定的阿斯克码获取到他对应的字符

                    语法:String.fromCharCode(阿斯克码) - 返回字符

                 4.startsWith - 判断字符串是否以某个字符或小字符串开头的

                    语法:字符串.startsWith(字符/小字符串) - 返回布尔值

                 5.endsWith - 判断字符串是否以某个字符或小字符串结尾的

                    语法:字符串.endsWith(字符/小字符串) - 返回布尔值

                 6.includes - 判断字符串中是否包含某个字符或小字符串

                    语法:字符串.includes(字符/小字符串) - 返回布尔值

                 7.replace - 替换字符串中指定的一小段

                    语法:字符串.replace(被替换的那一小段, 新的内容) - 返回替换后的字符串

                              (1)参数1为空,就会将新内容添加到原字符串的最前面

                 8.indexOf - 查找字符或小字符串在字符串中第一次出现的下标

                    语法:字符串.indexOf(字符/小字符串) - 找到了就返回下标,找不到就返回-1

                               第二个参数表示从哪个下标开始查找

var str = 'abcdababefcd'
var idx = str.indexOf('a', 2) // 参数a为要查找的字符,参数2为开始查找的下标
console.log(idx);

                 9.lastIndexOf - 查找小字符串或字符在字符串中最后一个出现的下标 

                    语法:字符串.lastIndexOf(字符/小字符串) - 找到就返回下标,找不到就返回-1

                               第二个参数表示将下标几当做是字符串结尾

var str = 'abcdababefcd'
var idx = str.lastIndexOf('ab', 5) /* 将下标5当做字符串末尾,查找字符ab在字符串中最后一次
                                                                        出现的下标 */
console.log(idx);

                 10.trim - 去除字符串左右两边的空格字符

                     语法:字符串.trim()

                 11.trimLeft - 去除左边空格

                     语法:字符串.trimLeft()

                 12.trimRight - 去除右边空格

                     语法:字符串.trimRight()

                 13.toUpperCase - 所有字符都转大写

                     语法:字符串.toUpperCase()

                 14.toLowerCase - 转小写

                     语法:字符串.toLowerCase()

                 15.split - 将字符串通过指定的分隔符,组成数组

                     语法:字符串.split(分隔符) - 返回数组

                              (1)split的第二个参数是数字,表示我们在数组中要保留前几个元素

                              (2)如果不加参数,默认将整个字符串当做一个元素放在数组中

                              (3)空字符串做分隔符,会将每个字符都作为数组的元素

                 16.slice - 截取字符串

                     语法:字符串.slice(开始下标, 结束下标) - 返回一小段字符串

                              (1)包前不包后(不包含结束下标)

                              (2)省略第二个参数,表示截取到末尾

                              (3)省略第二个参数时,就可以第一个参数也省略 - 从头截取到末尾

                              (4)下标可以使用负数表示,-3表示倒数第3个字符,-1表示倒数第1个字符

                              (5)如果开始下标比结束下标大,会截取到空

                 17.substr - 截取字符串

                     语法:字符串.substr(开始下标, 截取的字符串长度) - 返回一小段

                              (1)省略第二个参数,默认截取到末尾

                              (2)开始截取的下标可以用负数表示

                              (3)长度超出最大下标,就相当于省略了参数2

                 18.substring - 截取字符串

                     语法:字符串.substring(开始下标, 结束下标) - 返回一小段

                              (1)包前不包后

                              (2)省略第二个参数就是截取到末尾

                              (3)开始下标和结束下标相等就截取到空字符串

                              (4)开始下标大于结束下标,就先交换两个参数位置,然后再截取

                              (5)开始下标或结束下标是负数,就先替换为0,然后开始截取

3.字符串常见

 (1)字符串翻转 - 将`'I Love You'`转换成`'You Love I'`

// 将`'I Love You'`转换成`'You Love I'`
var str = 'I Love You'.split(' ').reverse().join(' ')
console.log(str);

 (2)过滤字符串中的敏感词 

var str = "无论多大麻烦,黑夜总会过去";
var arr = ['大麻', '夜总会']
for(var a = 0; a < arr.length; a++) {
    var s = ''
    for(var b = 0; b < arr[a].length; b++) {
        s += '*'
    }
    str = str.replace(arr[a], s)
}
console.log(str);

 (3)字符串去重

var str = 'aabbbccaaddd'

// 方法1.将重复的删除
// ①转成数组,去重再转成字符串
// ②利用字符串替换,将重复字符换成空字符,但是必须保留后面的字符,去除前面的重复
str.replace(str[1])
for(var a = str.length - 1; a >= 0; a--) {
    // str[a]跟他前面所有字符比较
    for(var b = 0; b < a; b++) {
        if(str[a] === str[b]) {
            str = str.replace(str[b], '')
        }
    }
}
console.log(str);

// 方法2.将不重复的放在新字符串中
var newStr = ''
for(var a = 0; a < str.length; a++) {
    if( !newStr.includes(str[a]) ) {
        newStr += str[a]
    }
}
console.log(newStr);

// 方法3.利用对象去重
var obj = {}
for(var a = 0; a < str.length; a++) {
    obj[ str[a] ] = str[a]
}
console.log(obj);
var newStr = ''
for(var key in obj) {
    newStr += obj[key]
}
console.log(newStr);

 (3)统计字符串中每个字符的个数

// 方法1.利用循环去统计
var str = 'aabbbccaaddde'
// 先将str去重 - 再统计
var newStr = 'abcde'
for(var a = 0; a < newStr.length; a++) {
    str[a]
    var k = 0 // 定义计数器,用于统计当前str[a]的次数
    for(var b = 0; b < str.length; b++) {
        if(newStr[a] === str[b]) {
            k++
        }
    }
    console.log(newStr[a] + '出现了' + k + '次');
}


// 方法2.利用indexOf找到就是下标,找不到就是-1,第二个参数代表从哪里开始找
var str = 'aabbbccaaddde'
// 先将str去重 - 再统计
var newStr = 'abcde'
var index = 0
var k = 0
while(true) {
    index = str.indexOf(newStr[0], index)
    if(index === -1) {
        break
    } else {
        k++
        index++
    }
}
console.log(newStr[0] + '出现了' + k + '次');

// 方法2代码优化
var str = 'aabbbccaaddde'
// 先将str去重 - 再统计
var newStr = 'abcde'
for(var a = 0; a < newStr.length; a++) {
    var index = 0
    var k = 0
    while(index != -1) {
        index = str.indexOf(newStr[a], index)
        if(index != -1) {
            k++
            index++
        }
    }
    console.log(newStr[a] + '出现了' + k + '次');
}


// 方法3.对象去重并统计
var str = 'aabbbccaaddde'
var obj = {}
for(var a = 0; a < str.length; a++) {
    if(obj[str[a]] === undefined) {
        obj[str[a]] = 1
    } else {
        obj[str[a]]++
}
console.log(obj);

// 方法3代码优化
var str = 'aabbbccaaddde'
var obj = {}
for(var a = 0; a < str.length; a++) {
    obj[str[a]] = obj[str[a]] ? obj[str[a]] + 1 : 1
}
console.log(obj);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值