严格模式
在js中某个变量在当前作用域里没有找到,会再作用域的父级查找,父级也没有就会一直往上级查找,如果全局定义中没有
发现当前变量的定义,会在当前作用域定义一个变量来赋值。
var a = 100
console.log(a)
b = a
console.log(b)
以上这种书写方式可行,但不推荐,因为全局变量里没有定义b的变量
在严格模式中
'use strict'
var a = 100
console.log(a)
b = a
console.log(b)
就会报错
数组的遍历方法
1. forEach
语法: 数组.forEach(function(item, index, origin){})
参数:
1. 数组实际每一项的值
2. 数组每一项对应的下标
3. 原数组
作用: 遍历数组
返回值:undefined 写了 return 也是 undefined
2. map
语法: 数组.map(function (item, index, origin) {})
参数:
1. 数组每一项实际的值
2. 数组每一项实际的值对应的下标
3. 原数组
作用: 映射数组
返回值: 返回一个和原数组长度一样的数组, 返回的数组的每一个值, 取决参数的return怎么写
3. filter;
语法: 数组.filter(function (item, index, origin) {})
参数:
1. 数组每一项实际的值
2. 数组每一项实际的值对应的下标
3. 原数组
作用: 过滤数组
返回值: 过滤数组后的新数组, 过滤条件取决于 参数的 return 怎么写
4. find;
语法: 数组.find(function (item, index, origin) {})
参数:
1. 数组每一项实际的值
2. 数组每一项实际的值对应的下标
3. 原数组
作用: 查找数据
返回值: 在数组内找到的第一个数据(不是数组)
5. findIndex;
语法: 数组.findIndex(function (item, index, origin) {})
参数:
1. 数组每一项实际的值
2. 数组每一项实际的值对应的下标
3. 原数组
作用: 查找数据 第一次出现的 下标
返回值: 在数组内找到的第一个数据出现的下标
6. every;
语法: 数组.every(function(item, index, origin){})
参数:
1. 数组第一项实际的值
2. 数组第一项实际的值对应的下标
3. 原数组
作用: 判断数组内数据是否全都满足条件
返回值: 一个布尔值
true
false
7. some;
语法: 数组.some(function (item, index, origin) {})
参数:
1. 数组每一项实际的值
2. 数组每一项实际的值对应的下标
3. 原数组
作用: 判断数组内数据是否 有一项 满足条件的
返回值: 一个布尔值
true: 表示数组内至少有一项满足条件
false: 数组内数据全都不满足条件
8. reduce;
语法: 数组.reduce(function (prve, item, index, origin) {}, init)
reduce方法的参数:
1. 如果传递第二个参数 init, 执行次数和数组长度相同
2. 如果不传递第二个参数 init, 默认第一值为数组第一项的值, 并且执行次数在数组长度上 减1
参数1的函数中4个形参的含义:
1. 表示初始值或者数组第一项的值(具体是什么取决于是否传递 init)
2. 数组每一项实际的值
3. 数组每一项实际的值对应的下标
4. 原数组
作用: 累加(叠加)
返回值: 循环运行结束后得到的值
字符串
引号包裹的内容就是字符串
单引号; 双引号; 反引号``
反引号的字符串也叫做模板字符串(ES6新)
1. 字面量
var str1 = 'hhhh'
console.log(str1)
2. 构造函数
var str2 = new String()
console.log(str2)
字符串也是有length与下标的
length 长度
索引(下标): 获取到字符串中指定位置的值
但是!是只读
字符串的使用方法
包装类型
字符串在正常查询使用的时候, 就是引号包裹起来的内容
但是如果想要使用字符串上的方法, JS 内部会先将字符串包装为一个字符串对象,
这个对象上有一些方法, 使用完毕后, 将字符串对象恢复为普通对象
1. charAt
语法: 字符串.charAt(索引)
作用: 查询指定下标的值
返回值: 查询到的值, 没有查询到就是一个 空字符串
2. charCodeAt
语法: 字符串.charCodeAt(索引)
作用: 查询指定下标的值 对应的 十进制码
返回值: 查询到的值对应的十进制码, 没有查询到就是 NaN
3. toLowerCase
语法: 字符串.toLowerCase()
作用: 将字符串转换为小写
返回值: 转换后的字符
4. toUpperCase
语法: 字符串.toUpperCase()
作用: 将字符串转换为大写
返回值: 转换后的字符
5. substr // MDN 说明 这个方法将来的某一天可能会删除, MDN 推荐使用 substring
语法: 字符串.substr(开始索引, 多少个)
作用: 截取指定字符串
返回值: 截取到的字符串
6. substring
语法: 字符串.substring(开始下标, 结束下标) 参数包前不包后
结束下标不传, 相当于写了 length
作用: 截取指定字符串
返回值: 截取到的字符串
7. slice
语法: 字符串.slice(开始下标, 结束下标) 参数包前不包后
结束下标不传, 相当于写了 length
开始下标不传, 相当于写了 0
作用: 截取指定字符串
返回值: 截取到的字符串
8. concat
语法: 字符串.concat(数据1, 数据2, 数据3)
作用: 将字符串和 参数传递的数据 拼接
返回值: 拼接后的字符串
9. indexOf
语法: 字符串.indexOf(数据, 开始下标)
作用: 寻找数据在字符串中的位置
返回值: 找到的时候返回下标, 找不到返回 -1
10. lastIndexOf
语法: 字符串.lastIndexOf(数据, 开始下标)
作用: 寻找数据在字符串中出现的位置(倒叙查找)
返回值: 找到返回下标, 找不到返回 -1
11. split
语法: 字符串.split('符号')
参数如果传递的是 空字符串, 会将字符串全部分隔开
作用: 在 字符串中找到分隔符, 将其分割, 并放置到数组中
返回值: 数组形式的
12. trim
语法: 字符串.trim()
作用: 去掉字符串两侧的空格
返回值: 将去掉空格的字符串返回
13. trimStart ---> trimLeft()
语法: 字符串.trimStart()
作用: 去掉字符串左侧(开始位置)的空格
返回值: 将去掉空格的字符串返回
14. trimEnd ---> trimRight()
语法: 字符串.trimEnd()
作用: 去掉字符串右侧(结束位置)的空格
返回值: 将去掉空格的字符串返回
15. includes
语法: 字符串.includes(字符串片段)
作用: 判断 当前字符串中 是否拥有 指定字符串 片段
返回值: true ---> 拥有; false ---> 没有
16. startsWith
语法: 字符串.startsWith('字符串片段')
作用: 查询字符串开头是不是 指定的 字符串片段
返回值: true: 是开头; false: 不是开头
17. endsWith
语法: 字符串.endsWith('字符串片段')
作用: 查询字符串结尾是不是 指定的 字符串片段
返回值: true: 是结尾; false: 不是结尾
18. replace
语法: 字符串.replace('要被替换的字符', '替换的字符')
作用: 找到当前字符串中第一个参数对应的值, 然后将其替换为 第二个参数传入的数据
返回值: 替换完成的字符串
反串字符串的方法
var str = 'aabbccdd'
var str1 = str.split('')
console.log(str1)
var str2 = str1.reverse()
console.log(str2)
var str3 = str2.join('')
console.log(str3)
统计字符串中每个字符出现的次数(以对象的形式记录)
// var str = 'aaabbccdddeeee'
// {
a:3,
b:2,
c:2,
d:3,
e:4
}
var str = 'aaabbccdddeeee'
var obj = {}
for (var i = 0
// if (obj[str[i]] == undefined) {
if (!obj[str[i]]) {
obj[str[i]] = 1
} else {
obj[str[i]]++
}
}
console.log(obj)