forin循环
- 一般用来遍历对象的循环
- 也可以遍历数组
- 语法
for (var attr in obj) { code }
- 对象中有多少个成员就循环多少回
- 在每一次循环中,attr就是当前次的对象的属性名
- 访问对象
console.log(obj[attr])
var obj = {
name: 'Jack',
age: '18',
gender: '男'
}
for (var attr in obj) {
console.log(obj[attr])
}
this 指向
- 全局调用 函数名() this — window
- 对象调用 对象.函数名() this — 点前面是谁就是谁
- 定时器处理函数 this — window
- 时间处理函数 this — 事件源
- 自执行函数 this — window
- 强行改变一个函数的 this 指向
-
call()
- 语法:
函数名.call(你要改变的函数的 this 指向, 第二个参数开始,依次是给函数传递的参数)
- 会直接把函数调用了
fn.call(obj, a, b, c)
// 这时 fn 里面的 this 已经指向obj了
- 语法:
-
apply()
- 语法:函数名.apply(你要改变的函数的 this 指向,第二个参数是一个数组[],数组里面是依次是给函数传递的参数)
- 会直接调用函数
fn.apply(obj, [1, 2, 3])
- apply 还可以用于一些需要一个一个传参的情景下
- 比如:
var res = Math.max.apply(null, [1, 5, 9, 10])
在这里使用 apply 可以实现一个一个的向 max 函数传递参数
- 比如:
-
bind()
- 语法:函数名.bind(你要改变的函数的 this 指向)
- 不会立即执行
- 返回值:是一个函数(已经被改变好 this 指向的函数)
var res = fn.bind(obj)
// 把 fn 函数的 this 指向改变以后,把新的函数的地址给到 res,此时的 res 就相当于一个函数 可以直接被执行res(1, 2, 3)
- 它对函数的参数传递有两种方式
- 调用返回的函数的时候传递
res(1, 2, 3)
- 直接从第二个参数开始传递
var res = fn.bind(obj, 1, 2, 3)
- 调用返回的函数的时候传递
- 在事件中要是向改变 this 指向要使用 bind
div.onclick = fn.bind(obj)
// 这时的 事件里面的 this 已经指向 obj 了
-
向数组末尾追加一个元素有多少种方式
1. arr.push(1)
2. var arr = [1, 2, 3]
arr[arr.length] = '添加的元素'
ES5 的严格模式
- 开启严格模式
在作用于的开头写一个use strict
- 变量必须有声明的关键字 var
- 函数的形参不允许重复
- 全局调用的函数没有this
字符串的创建方式
-
字面量创建
var str = 'hello'
-
内置构造函数创建
var str = new String('world')
-
包装数据类型
- 字符串是一个包装数据类型
- 在使用的时候会转换成一个对象的形式,使用完以后会转换回简单数据类型
字符串的操作
-
字符串有一个 length 属性,表示字符串的长度,是一个 number 数据类型
-
字符串也是按照索引进行排列的 0 ~ 正无穷
-
获取字符串的某一个字符
字符串[索引]
-
可以使用 for 循环来进行遍历
-
字符串的常用方法
charAt()
按照索引找到字符,并返回字符的索引charCodeAt()
按照索引找到字符,返回的是字符的编码substring(开始索引, 结束索引)
截取字符串,包前不包后substr(开始索引, 个数)
按个数截取concat()
对字符串进行拼接slice(开始索引, 结束索引)
包前不包后split()
切割字符串,返回值是一个数组replace(把什么, 替换成什么)
替换字符串内容toLowerCase()
转小写toUpperCase()
转大写indexOf()
按照字符去获取索引,有的话返回索引,没有的话返回 -1
- 反转字符串
str.split('').reverse().join('')
- 数组去重
var arr = [] var newArr = [] for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) { newArr.push(arr[i]) } }
arr.sort(function (a, b) {return a - b}) for (var i = 0; i < arr.length; i++) { if (arr[i] === arr[i + 1]) arr.splice(i, 1) i-- }