es3的不合理的地方
1.省略var定义变量
var a = 10
b = 20
2.函数的形参可以同名
function fn(a, a) {
console.log(a, a);
}
fn(1, 2)
3.
js中有一个关键字this - this关键字是代表一个变量的 - 在不同的作用域中代表的值是不一样的
全局的this
console.log(this); // window
function fn() {
console.log(this); // window
}
fn()
2.es5消除不合理
es5提出了一个严格模式语法:
语法: - 字符串 'use strict'
'use strict'
a = 10
console.log(a);
function fn(a, a) {
console.log(a);
}
fn(1, 2)
function fn() {
console.log(this);
}
fn()
总结:
加一个字符串 - 'use strict'
全局顶部或局部的顶部
全局放了可以约束所有代码
局部放了只能约束局部代码
不允许省略var定义变量
不允许函数的形参同名
不允许普通函数中的this代表window
严格模式的优点:
(1)消除了一些不合理的语法,规避了一些不必要的错误
(2)语法更规范了,运行效率更高了
3.重新认识字符串
var str = 'abcdef'
字符串可以像数组一样取下标
console.log( str[0] );
console.log( str[2] );
能取下标就能遍历
for(var a = 0; a <= 5; a++) {
console.log(str[a]);
}
字符串也有length长度
console.log(str.length);
for(var a = 0; a < str.length; a++) {
console.log(str[a]);
}
字符串中的length不允许改
str.length = 20
console.log(str);
字符串不允许修改、删除、添加字符 - 字符串是一种只读数据
str[0] = 'o'
console.log(str);
str[str.length] = 'p'
console.log(str);
总结:(1)字符串可以取下标
(2)字符串有长度
(3)字符串是只读数据
4.字符串比较
字符串也能进行大小比较
console.log( '11' < '12' );
字符串的比较规则是逐字符比较
console.log('a' < 'b'); -- 大小由阿斯克码决定
console.log('我' > '你'); -- unicode - 万国码
记忆:
0-9:48-57
A-Z:65-90
a-z:97-122
5.字符串方法
(1)charAt - 通过指定下标获取到对应的字符
语法:字符串.charAt(下标) - 返回字符
var str = 'abcdefg'
var s = str.charAt(3)
console.log(s)
(2)charCodeAt - 通过指定下标获取到对应字符的阿斯克码
语法:字符串.charCodeAt(下标) - 返回字符对应的阿斯克码
var code =str.charCodeAt(3)
console.log(code)
(3)String.fromCharCode - 通过指定的阿斯克码获取到他对应的字符
语法:String.fromCharCode(阿斯克码) - 返回字符
var s = String.fromCharCode
(4)split - 将字符串通过指定的分隔,组成数组
语法:字符串.split(分隔符) - 返回数组
var str = 'open_door_now' ['open', 'door', 'now']
var arr = str.split('_')
split的第二个参数是数字,表示我们在数组中要保留几个元素
var arr = str.split('_', 20)
var arr = str.split() 如果不加参数,默认将整个字符串当做数组的元素
var arr = str.split('') 空字符串做分隔符,会将每个字符都作为数组的元素
console.log(arr);
(5) startsWith - - 判断字符串是否以某个字符或小字符串开头的
语法:字符串.startsWith(字符/小字符串) - 返回布尔值
var str ='abcdef'
var bool = str.startsWith('aabc')
console.log(bool)
(6)endsWith - 判断字符串是否以某个字符或小字符串结尾的
语法:字符串.endsWith(字符/小字符串) -返回布尔值
var str = 'abcdef'
var bool = str.endsWith('f')
console.log(bool)
(7)includes - 判断字符串中是否包含某个字符或小字符串
语法:字符串.includes(字符/小字符串) 返回布尔值
var str = 'abcdef'
var bool = str.includes('ab')
console.log(bool);
(8)indexOf - 查找字符或小字符串在字符串中第一次出现的下标
语法:字符串.indexOf(字符/小字符串)
找到了就返回下标,找不到就返回-1
var str = 'abcdababefcd'
var idx = str.indexOf('a')
第二个参数表示从哪个下标开始查找
var idx = str.indexOf('a', 2)
console.log(idx);
(9)lastIndexOf - 查找小字符串或字符在字符串中最后一个出现的下标
语法:字符串.lastIndexOf(字符/小字符串) 找到就返回下标,找不到就返回-1
var idx = str.lastIndexOf('ab')
第二个参数表示将下标几当做是字符串结尾
var idx = str.lastIndexOf('ab', 5)
console.log(idx);
(10)slice - 截取字符串
语法:字符串.slice(开始下标,结束下标)
返回一小段字符串 包前不包后
var str = 'abcdababefcd'
var s = str.slice(2, 5)
省略第二个参数,表示截取到末尾
var s = str.slice(2)
省略第二个参数时,就可以第一个参数也省略 - 从头截取到末尾
var s = str.slice()
console.log(s);
(11)trim - 去除字符串左右两边的空格字符
语法:字符串.trim( )
var str = ' abcd '
console.log(str);
var s = str.trim()
console.log(s);
(12)trimLeft - 去除左边空格
语法:字符串.trimLeft( )
语法:字符串.trimLeft()
var str = ' abcd '
var s = str.trimLeft()
console.log(s);
(13)trimRight - 去除右边空格
var s = str.trimRight()
console.log(s);
(14)toUpperCase - 所有字符都转大写
语法:字符串.toUpperCase( )
var str = 'i love you'
var s = str.toUpperCase()
console.log(s);
(15)toLowerCase - 所有字符都转小写
语法:字符串.toLowerCase()
var str = 'I Love You'
var s = str.toLowerCase()
console.log(s);
(16)substr - 截取字符串
语法:字符串.substr(开始下标, 截取的长度) - 返回一小段
var str = 'abcdefghijklmn'
var s = str.substr(2, 5)
省略第二个参数,默认截取到末尾
var s = str.substr(2)
console.log(s);
(17)substring - 截取字符串
语法:字符串.substring(开始下标, 结束下标) - 返回一小段
包前不包后
var s = str.substring(2, 5)
省略第二个参数就是截取到末尾
var s = str.substring(2)
console.log(s);
(18)replace - 替换字符串中指定的一小段
语法:字符串.replace(被替换的那一小段, 新的内容) - 返回替换后的字符串
var str = 'i love html very much and html is very good'
str = str.replace('html', 'js')
str = str.replace('html', 'js')
console.log(str);
6.三个截取方法的区别
(1)slice 可以使用负数表示下标
var str = 'abcdefghijklmnopq'
var s = str.slice(-5, -2)
var s = str.slice(-2, -5) 因为截取一定是从左向右的,开始下标在结束下标的右边,就截取到字符串
console.log(s);
(2)substr 可以用负数表示开始下标
var s = str.substr(-5, 3)
console.log(s);
(3)subtring 不能用负数表示下标
如果开始下标在结束下标的右边,就先交换两个参数的位置 - 然后截取
var s = str.substring(5, 2)
如果使用了负数表示下标,就将负数先转成0去截取
var s = str.substring(-2, 2)
var s = str.substring(2, -2)
console.log(s);