this
this 的指向 你只需要看函数调用 不要管任何的预解析和作用域查找或者赋值规则 也不要管函数定义在哪个地方
1、函数名() 函数内部的 this 指向 window
2、***.函数名() 函数内部 this 指向 . 前面的那个东西
3、事件处理函数中 this 指向 事件源(由谁触发)
function fn() {
console.log(this)
}
box.onclick = fn //点击事件
//函数指向事件源
var obj = {
name:"老王",
age:18,
fn:function(){
console.log(this)
}
}
//现在是吧 obj.fn 的函数地址 赋值给了 a
var a = obj.fn
a()
//函数名() 函数内部的 this 指向 window
var obj = {
name: "老王",
age: 18,
fn: fun
}
function fun() {
console.log(this)
}
obj.fn()//***.函数名() 函数内部 this 指向 . 前面的那个东西
//指向obj
var obj = {
name: "老王",
age: 18,
fn: fun,
fnn: function() {
console.log(this)
this.fn() //xxx.函数名,指向obj
}
}
function fun() {
console.log(this)
}
var a = obj.fnn
box.onclick = a
obj.fnn() //指向函数名 obj
var obj = {
name: "老王",
age: 18,
fn: function() {
console.log(this) //window,因为函数内部的this指向window
}
}
var a = obj.fn //fn赋值给a了
a()
box.onclick = function() {
console.log(this)
a() //点击后,1.会指向window 2.会指向事件源 .box
}
box.onclick = function(){
// 事件处理函数
console.log(this)
}
在函数名复杂或者不确定的情况下,可以使用this
***.函数名() 调用 那么函数内部的 this 指向 . 前面的那个东西
var objhdajshdjkashdkjashfjkhaskjfjasklhfjkashfkashfklhsaklfh = {
name: "Jack",
age: 18,
gender: '男',
sayHi: function () {
// console.log("大家好 我是" + obj.name + "今年" + obj.age + "岁" + "性别" + obj.gender)
console.log("大家好 我是" + this.name + "今年" + this.age + "岁" + "性别" + this.gender)
}
}
objhdajshdjkashdkjashfjkhaskjfjasklhfjkashfkashfklhsaklfh.sayHi()
新增的数组方法
1.forEach()
用于调用数组的每个元素
它的参数是一个函数。这个函数有三个参数
①item是数组的每一项
②index是索引
③原数组
例 var arr=['a','b','c','d']
var res= arr.forEach(function(item,index,a){
console.log(item,index,a)
})
2.map()
用于返回一个新数组
它的参数是一个函数。这个函数有三个参数
①item是数组的每一项
②index是索引
③原数组
例
var res=arr.map(function(item,index,a){
return item+"****"
console.log(item)
})
3.filter() 过滤,满足条件的数据,放到一个新的数组里面
用于返回一个新数组
它的参数是一个函数。这个函数有三个参数
①item是数组的每一项
②index是索引
③原数组
var res = arr.filter(function(item, index, a) {
return item % 2 === 0
})
console.log(res)
console.log(arr)
4、some()检测数组里面有没有满足条件的项,只要数组里面有一项
满足条件 返回 true , 当所有的 都不满足 就返回 false
第一个 item 是数组的每一项
第二个参数 index 是索引
第三个参数 就是原数组
返回值 就是一个 布尔值
不会改变原数组
var arr = [10, 32, 43, 45, 12, 61]
var res = arr.some(function(item, index, a) {
return item > 5
})
console.log(res)
console.log(arr)
5、every() 检测数组里面的每一项是否满足条件
每一项都满足条件 就返回true只要有一个不满足条件就返回false
第一个 item 是数组的每一项
第二个参数 index 是索引
第三个参数 就是原数组
返回值 就是一个 布尔值
不会改变原数组
var res = arr.every(function(item,index,a){
return item > 5
})
console.log(res)
字符串
var str1 = new String('qwer')//这是使用内置构造函数 创建出来的字符串 有索引
console.log(str1);
for (var i = 0; i < str1.length; i++) {
console.log(str1[i])
遍历出来就是
q
w
e
r
}
字符串的方法
1. charAt() 查找 字符串里对应下标的字符并且返回
var str = "abcdefg"
我现在要拿一个e出来
var res = str.charAt(4)
console.log(res)
2.charCodeAt() 查找字符串对应的字符集编码
var res = str.charCodeAt(4)
console.log(res)
3.substring()
第一个参数是开始截取的位置
第二个参数是结束截取的位置(但是取不到这个数)
如果只有一个参数 就是从这个参数的位置 截取到最后
包前不包后
返回值:截取的字符串
不会改变原始字符串
可以写负数
var str = "abcdefg"
var res = str.substring(1)
console.log(res);
4.substr()
第一个参数 是开始截取的位置
第二个参数 是截取的个数
如果只有一个参数 就是从这个参数的位置 截取到最后
返回值 : 截取的字符串
不会改变原始字符串
不可以写负数
var str = "abcdefg"
var res = str.substr(2)
console.log(res)
5. indexOf()
检测字符串里是否有某个数据
返回值 :如果有这个数据,就返回对应的序号,没有就返回-1
var str = "abcdefg"
var res = str.indexOf('c')
console.log(res);
6、toLowerCase() 转为小写字母
返回值:就是转换后的字符串
不会改变原始字符串
var res = str.toLowerCase()
console.log(res)
console.log(str)
7、toUpperCase() 转为大写字母
返回值:就是转换后的字符串
不会改变原始字符串
var res = str.toUpperCase()
console.log(res)
console.log(str)
8、replace()
替换掉字符,例如敏感字用**显示
第一个参数是 要被替换的字符
第二个参数是 用什么替换
返回值:就是改变后的新的字符串
不会改变原始字符串
例1:
str = "baskjdhasd"
var res = str.replace('a', '**')
console.log(res);
例2:
var str1 = "dgsahdgSMgfdshafgSMfgshahjdsSM"
console.log(str1.replace("SM","**"));
9. split() 以一个符号进行分割, 分割成一个数组
var str1 = 'a,b,c,d-e-f-g'
接收一个参数 就是以这个参数进行分割
返回值: 分割好的字符串组成的一个新的数组
var res = str1.split()
console.log(res);