1.ES5
js形成的时候比较早,当时web需求比较少,所以一开始的js功能比较少,语法也不是很严谨。 随着时代的发展和Web应用的普及,js需要更多的功能和更严谨的句型,所以js会有版本升级。 js的第一个版本是ECMA最初统一标准后的版本。 我们今天使用的大多数句型都是 ECMAScript 第 3 版,简称 es3。 到目前为止,已有es7、8、9、甚至es10的版本。 近年来基本上每年都有新的版本更新。
每个版本更新都需要浏览器支持才能运行,但js更新后浏览器不会立即更新。 因此,有些版本发布后,浏览器需要很长时间才能与其兼容。 到目前为止,我们认为 es5 是兼容性最好的版本。
与我们现在使用的es3相比,es5在语法上没有变化。 它添加了严格模式和一些字段方法。
1. 概念
(1) ECMAScript 版本 5
(2) 被公认为兼容性最好的版本
(3)在我们以后的项目中javascript 判断是否为字符串,实际运行的代码是es5代码。
2. 严格模式
(一)概念
因为js作用域、变量隐式声明等句型会导致很多意想不到的错误,所以ES5中增加了严格模式句型,以严格规范代码的编写。严格模式就是严格限制不合理的句型。
(2)运用句型
字符串-'使用严格'
1.写在全局的底部-----可以约束整个页面
2.写在最下面的部分-----只能约束本地代码
应该放在代码的最前面,即script标签中的第一行或者函数中的第一行,否则无效; 严格模式可以规范当前脚本标签或当前函数中的代码,但不能规范当前函数中的代码。 其他脚本标签和其他函数中的代码
(3)有哪些限制?
1、定义变量时不允许省略var
2.不允许有同名的数组
3.普通函数中的this不允许代表窗口
(4) this关键字
js中有一个关键字叫做this。 this关键字代表一个变量,不同作用域代表的值是不同的。
1.全局this-window
2.修复了非严格模式下普通函数中的this-window
3.严格模式下普通函数中的this-undefined
(5)严格模式的优点
1、消除一些不合理的句型javascript 判断是否为字符串,避免未知错误
2.代码更规范,运行效率更高
2. 字符串
1.重新理解
(1)字符串可以带下标——可以带下标进行遍历
(2)字符串有长度宽度,并且字符串中的长度不允许改变。
(3) 字符串是只读数据,不允许更改、删除或添加字符。
2. 比较
(1)字符串的比较规则是逐字符比较
字符串可以比较大小,汉字也是字符串,汉字也可以比较大小:
console.log('我'>'你') // true
console.log('你'>'我') // false
汉字的大小是由unicode决定的。
Asker码共有128个,包括符号、大小写汉字、数字。 Askercode是德国人创建的,所以对英语的支持非常好。 后来随着计算机的普及,各个国家在使用计算机时都无法使用自己的语言,导致使用起来非常困难。 因此,许多国家的科学家共同制定了一个更大的对照表,其中包括各个国家的文字符号,因此被称为通用代码,也称为Unicode。
事实上,unicode是一个更大的Asker码。
(2) 大小由Ask代码决定
0~9 -------- 48~57
A~Z -------- 65~90
a~z -------- 97~122
(3)字符串模式
1.charAt——通过指定下标获取对应的字符
语法:String.charAt(下标) - 返回字符
2.charCodeAt——通过指定下标获取对应字符的Asker码
语法: string.charCodeAt(subscript) - 返回字符对应的 Asker 代码
3.String.fromCharCode——通过指定的Asker code获取对应的字符
语法:String.fromCharCode(Asker code) - 返回字符
4.startsWith - 判断字符串是以某个字符开头还是以小字符串开头
语法: string.startsWith(字符/小字符串) - 返回布尔值
5.endsWith - 确定字符串是否以某个字符或小字符串结尾
语法: string.endsWith(字符/小字符串) - 返回布尔值
6.includes——判断字符串是否包含某个字符或者小字符串
语法: string.includes(character/small string) - 返回布尔值
7.replace——替换字符串中的指定段
语法:string.replace(替换的短段落,新内容)——返回替换的字符串
(1) 如果参数1为空,则新的内容将添加到原字符串的前面。
8.indexOf - 查找字符串中第一次出现的字符或小字符串的索引
语法: string.indexOf(character/small string) - 如果找到,返回索引,如果没有找到,返回-1
第二个参数表示从哪个下标开始查找
var str = 'abcdababefcd'
var idx = str.indexOf('a', 2) // 参数a为要查找的字符,参数2为开始查找的下标
console.log(idx);
9.lastIndexOf - 查找字符串中最后一次出现的小字符串或字符的索引
语法: string.lastIndexOf(character/small string) - 如果找到则返回下标,如果没有找到则返回-1
第二个参数表示将下标视为字符串的结尾。
var str = 'abcdababefcd'
var idx = str.lastIndexOf('ab', 5) /* 将下标5当做字符串末尾,查找字符ab在字符串中最后一次
出现的下标 */
console.log(idx);
10.trim - 删除字符串左右两侧的空格字符
语法: string.trim()
11.trimLeft - 删除右侧的空格
语法:String.trimLeft()
12.trimRight - 删除右侧的空格
语法:String.trimRight()
13.toUpperCase - 将所有字符转换为小写
语法:String.toUpperCase()
14.toLowerCase - 转换为大写
语法:String.toLowerCase()
15.split——使用指定分隔符组成链表
语法: string.split(separator) - 返回链表
(1) split的第二个参数是一个数字,表示我们要保留链表中的前几个元素
(2) 如果不添加参数,则默认将整个字符串视为一个元素,放入链表中。
(3) 如果使用空字符串作为分隔符,则每个字符将作为形参的一个元素。
16.slice-截取字符串
语法: string.slice(start subscript, end subscript) - 返回一小段字符串
(1) 换行前但不是换行后(不包括结束下标)
(2)省略第二个参数表示拦截到底
(3)当省略第二个参数时,第一个参数也可以省略——从头到尾截取
(4)下标可以用正数表示,-3表示倒数第三个字符,-1表示倒数第一个字符
(5) 如果起始下标大于结束下标,则截取为空。
17.substr - 截取字符串
语法:string.substr(起始下标,截取的字符串宽度) - 返回一个短段落
(1)省略第二个参数,默认截取到最后
(2) 开始拦截的下标可以表示为正数
(3) 如果长度超过最大下标,则相当于省略参数2
18.substring - 截取字符串
语法: string.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);
发表评论