blur得到焦点
onblur失去焦点
declick鼠标双击
keydown键盘按下(过程)
keyup 键盘弹起(结果)
var全局变量
javascript(9种):
number(int/float) string boolean null undefined object(对象) symbol(标识符) Array(数组) function
声明变量
var存在变量提升,多次申明,多次赋值
变量提升:即将变量声明提升到它所在作用域的最开始的部分
console.log(a);
var a=1;
实际执行顺序是:
var a;
console.log(a);
a=1;
for(var a=0;a<5;a++) {
console.log(a)
}
console.log(a)
//仍然能访问a
如果是let,会被报错
let无变量提升,不可以多次声明,可以多次赋值,一般用于循环遍历计数
const一般用于全局作用域做常量
设置文本框
#text {
resize: vertical;
max-height: ;
min-height: ;
console.log(5/'0');//infinity无穷大
console.log("qwq"-0)//NaN
console.log(console.log("qwq"));//qwq,undefined看懂括号里面的输出了qwq,看不懂外面的
console.log(console.log("qwq")*5);//qwq,NaN
console.log("qwq")*5//输出一个qwq
console.log(1)+console.log(2)//不能运算,把加号看做终止符号
console.log(1)console.log(2)//报错
console.log(console.log(1))//先1后undefined
splice(start,deleteCount?,item1?) ,通过删除或替换现有元素或者原地
添加新的元素来修改数组,并以数组形式返回被修改的内容(如果只删除了一个
元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组)。
中间负数时 ,表示增加几个
操作对象:
删除对象属性:delete 对象.属性;
对象属性检测:“属性名” in 对象,有返回true
输出多个字符串拼接
<script>
var poeple={
name: "zkm",
num: 21,
toString(){
// return "People:name="+this.name
// 橙色部分原样输出,输出变量的值用${}
return `People{name=${this.name}}`
}
</script>
对象序列化
- 常规转换
obj.tostring()
- 转换成jason字符串
this
字面量
源代码中一个固定值的表示法,字面量表示如何表达这个值(一眼看上去就知道是什么类型)
- 数字字面量:8、9/10
- 字符串字面量:‘黑马’
- 布尔字面量:true
函数的使用
两种方法
<script>
//申明+调用
// 函数:1.
function 函数名() {
}
// 调用
// 2.函数关键字
var 变量名=function(){}
</script>
匿名函数
没有名字的函数
两种情况:
- 匿名函数自执行:声明后不需要调用就直接执行(自调用函数),程序一进入就执行该函数
- 函数表达式:把函数存到变量,或将函数存到数组对应位置,调用时通过变量或者数组对应位置进行调用
调用时要写括号
对象使用
三种方法
<script>
// 利用字面量创建对象,对象的属性和方法
var obj={
name:'xxc',
age: 18,
sayHi: function() {
console.log('hi');
}
}
// 利用new object创建,创建后再赋值
var obj=newObject();
obj.name='xxc';
obj.age=18
obj.sayHi=function() {
console.log('hi');
}
// 一些对象具有相同的属性和方法,抽象封装到函数里
function 函数名(形参) {
}
var 对象=new 函数名(实参)
var 对象=new 函数名(实参)
</script>
删除对象属性:delete 对象.属性;
对象属性检测:“属性名” in 对象,有返回true
异步
同步任务结束,才有任务队列执行
异步任务不是马上放到任务队列中,会放到特定的线程中,特定时间放进去
主程序接着走,延迟和等待程序挂到另外一个列表等待执行,不阻塞。
定时器:settimeout(执行一次)/setInterval(隔一段时间执行一次)
异步请求:ajax
es6:promise
不会因延迟和等待阻塞程序
同步代码优先级比异步代码高
setTimeout(function(){},t)
在JS中,凡是有异步的地方,基本就会有回调函数的存在
// 函数
function fn() {
setTimeout(function () {
return 124;
}, 0);
}
var res = fn();
console.log(res); //结果为undefined
// 通过回调函数
// 函数有个形参
function fn(calllback) {
setTimeout(function () {
var data=123;
// 结果不能直接return
//return data;
// 把结果作为实参,叫callback这次参数
callback(data)
}, 0);
}
var fn1=function(res) {
console.log(res);
}
fn(fn1);
//fn1函数传到fn,被callback接受,callback(data),data实参,data的值被res接受
</script>
function fn(calllback) {
setTimeout(function () {
var data = 123;
// 结果不能直接return
//return data;
// 把结果作为实参,叫callback这次参数
callback(data);
//防止参数传递错误
if (typeof callback == "function") callback(data);
//简洁
typeof callback == "function" && callback(data);
}, 0);
}
fn(function (res) {
console.log(res);
});
</script>
异步
解决回调地狱的问题
<script>
// 三个异步代码,三个function
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1);
}, 1000);
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(2);
}, 500);
});
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(3);
}, 200);
});
p1.then(function(res){
console.log(res);
return p2;
})
.then(function(res){
console.log(res);
return p3;
})
.then(function(){
console.log(res);
})
</script>
1:08
24573816
在10秒时放入宏任务2
在20秒时放入宏任务1
下面两段时执行完33for循环才开始
在33+20秒时放入宏任务3
在43毫秒时放入宏任务4
中间执行完33秒时,时间已经远超10秒和20秒
所以两个任务会马上执行,1、3同时输出
到了43
浏览器最小时间间隔是4ms,如果间隔时间还小,浏览器无法识别,会按照注册事件依次执行
var timer1=setTimeout(function() {
console.log(timer1);
}, 3);
var timer2=setTimeout(function() {
console.log(timer2);
}, 2);
var timer3=setTimeout(function() {
console.log(timer3);
}, 1);
// 上面结果是321
// 如果是0.3,0.2,0.1,无法识别,结果是123
1.回调函数
函数以参数的形式传递