- 箭头函数比普通函数写法更简洁
- 箭头函数没有this,他的this是函数所处上下文中的this(call、apply等任何方式都无法改变this的指向)
- 箭头函数中没有arguments,只能基于…arg获取传递的参数集合(数组)
- 箭头函数不能被new执行(因为箭头函数没有this也没有prototype)
let str='哈哈666,HAha'
//使用正则匹配字符串中的字母
str=str.replace(/[a-zA-Z]/g,item=>{
return item.toUpperCase()===itemitem.toLowerCase():item.toUpperCase()
})
console.log(str) //哈哈666,haHA
~function(str){
function myIndexOf(str){
let reg=new RegExp(str)
let res=reg.exec(this)
return res===null?-1:res.index
}
String.prototype.myIndexOf=myIndexOf
}()
//测试
let str ='哈哈哈哈啊哈哈666啊'
let p='666'
let index=str.myIndexOf(p)
console.log(index)
let str='http://www.xxx.com/index.html?name=xxx&age=18#video'
let reg=/^(?:(http|https|ftp):\/\/)?((?:[\w-]+\.)+[a-z0-9]+)((?:\/[^/?#]*)+)?(\?[^#]+)?(#.+)?$/i
console.log(reg.exec(str))
/*url格式
* 1.协议:http/https/ftp
* 2.域名:www.baidu.com
* baidu.com
* kbs.sports.qq.com
* kbs.sports.qq.com.cn
* 3.请求路径
* /
* /index.html
* /stu/index.html
* /stu/
* 4.问号传参
* ?xxx=xxx&xxx=xxx
* 5.哈希值
* #xxx
*/
let reg=/(?!^[a-zA-Z]+$)(?!^[0-9]+$)(?!^[a-z0-9]+$)(?!^[A-Z0-9]+$)^[a-zA-Z0-9]{6,16}$/
属性为name
值为value的元素集合
例如下面示例:
let ary=$attr(‘class’,‘box’)//获取页面中所有class为box的元素
function $attr(property,value){
//获取页面所有元素
let allObj=document.getElementByTagName(*)
//因为获取的元素是伪数组所以需要转换成数组
allObj=Array.from(allObj)
//存放符合条件的与元素
let arr=[]
//遍历所有元素
allObj.forEach(item=>{
let itemValue=item.getAttribute(property)
//如果需要获取的属性为class,则需要特殊处理
//需满足如:class='container box' 获取class为box
//需满足如:class='containerbox' 获取class为box
if(property==='class'){
//\b单词作为边界
new RegExp("\\b"+value+"\\b").test(itemValue)?arr.push(item):null
return
}
//如果itemValue===value说明property该元素符合要查找的元素
if(itemValue===value){
arr.push(item)
}
})
}
new 发生了什么事情
- 像普通函数执行一样,形成一个私有的作用域
- 形参赋值
- 变量提升
- 默认创建一个对象,让函数中的this指向这个对象,这个对象就是当前类的一个实例
- 代码执行
- 默认把创建的对象返回
function Person(name){
this.name=name
}
function _new(fn,...arg){
//创建对象
//利用Object.create的特性,将obj的__proto__指向fn.prototype
let obj=Object.create(fn.prototype)
//修改fn的this指向
fn.call(obj,...arg)
//返回该对象
return obj
}
let zhangsan=_new(Person,'张三')
console.log(zhangsan.name)//张三
console.log(zhangsan.__proto__===Person.prototype)//true
例如:{
1:222,
2:123,
5:888
}
请把数据处理为如下结构:[222,123,null,null,888,null,null,null,null,null,null,null,null]
//方法一
let obj={
1:222,
2:123,
5:888
}
let arr=new Array(12).fill(null).map((item,index)=>{
return obj[index+1]||null
})
//方法二
let obj={
1:222,
2:123,
5:888
}
let arr=new Array(12).fill(null)
Object.keys(obj).forEach(item=>{
arr[item-1]=obj[item]
})
//方法三
let obj={
1:222,
2:123,
5:888
}
obj.length=13
let arr=Array.from(obj).slice(1).map(item=>typeof(item)==='undefined'?null:item)
})
mouseover
mouseenter
function Product(){
var name='张三'
this.getName=function(){
return name
}
}
var obj=new Product()
console.log(obj.name)//undefined
console.log(obj.getName())//张三
function once(func){
var tag=true
return function(){
if(tag===true){
func.apply(null,arguments)
tag=false
}
return undefined
}
}
==:等同,比较运算符,两边值类型不同的时候,先进行类型转换,再比较;
=== 恒等,严格比较运算符,不做类型转换,类型不同就是不等;
Object.is()与===的行为基本一致,不过有两处不同
+0不等于-0。
NaN等于自身。
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
startwith(searchvalue,start)
- searchvalue 必需,要查找的字符串。
- start 可选,查找的开始位置,默认为 0。
- 返回boolean类型,未找到返回false
indexof
- searchvalue 必需,要查找的字符串。
- start 可选,查找的开始位置,默认为 0。
- 返回某个指定的字符串值在字符串中首次出现的位置。未找到返回-1