经过这段时间的学习,我将目前所学的JavaScript的基础部分做一个总结。
一、JavaScript基础知识
1、JavaScript是一个脚本语言,也是前端开发的核心语言,目前所学的是ecmascript5.0的版本,企业里用的是ecmascript6.0/es7,基本上是在5.0的基础上对语句进行了一些优化等等。
2、JavaScript对页面的渲染方式
分为两种:外部引用和内嵌
引用的先后顺序取决于浏览器解析的顺序,浏览器的解析顺序是从上到下,所以根据不同的需求来选择不同的引入顺序。有些网页需要加载完成,所以脚本里面就需要加载完成的代码;有些是按需加载,则需要看元素时候初始化完成。
3、变量
变量其实就是存储的东西,包括值类型和引用类型。在JavaScript中严格遵守大小写的规则,所以在写代码的时候需要严格要求。
(1)、变量的数据类型(7种)
number数字类型 string字符串类型 boolean布尔类型 null空类型 undefined未定义类型 object对象类型 array数组类型
检测变量数据类型的方法:typeOf
例如:var a=10;
console.log(typeof a);//number
(2)、变量的声明
关键词:var(变量的声明) new(变量数据类型的声明)
例如:var x= new Number;
var person= new Object;
(3)、变量的命名(驼峰法)
例如:firstName = “John”;
lastName = “Doe”;
注意:变量名应该区分大小写,允许包含字母、数字、美元符号($)和下划线,但第一个字符不允许是数字,不允许包含空格和其他标点符号。
(4)、变量的声明(提前声明)
正确的声明例如:
var n=10;
console.log(n);
错误的声明例如:
console.log(n);
var n=10;
另外,在变量的使用之前需要先初始化,即赋值。
例如:var carname=“bianliang”;
(5)、全局变量和局部变量(作用域)
作用域是可访问变量的集合。
局部变量:只能在函数内部访问。
全局变量:变量在函数外定义,即为全局变量。全局变量有 全局作用域: 网页中所有脚本和函数均可使用。如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
全局变量和局部变量最明显的使用例子就是闭包。
例如:
function fun(n,o) {
console.log(o)
return {
fun:function(m){
console.log(m,n);
return fun(m,n);
}
};
}
在这里,n就是一个全局变量,m则是一个局部变量。闭包的变量会存在内存当中,所以尽量避免使用闭包以防内存泄露。
二、函数问题
在JavaScript中,函数即对象,可以随意地被程序操控,函数可以嵌套在其他函数中定义,这样可以访问它们被定义时所处的作用域中的任何变量。
1、JavaScript中常规函数的定义方法
关键词:function
例如:
function method() {
console.log(“javascript”);
}
函数执行的方法:函数名();
2、带返回值的函数
function method_3(a,b,c){
console.log(a,b,c);
return a+b+c;
}
method_3(1,2,3);
3、带参函数
分为:形参和实参
例如:
console.log(methdo_1());
function methdo_1() {
代码
return “你好”;//返回的数据类型不定
}
method_2(1,2,3);
function method_2(a,b,c){
console.log(a,b,c);
}
4、传递参数函数
例如:
method_4(1,2,3);
function method_4(){
//使用传递的参数 arguments 参数列表对象
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
console.log(arguments.length);
}
5、匿名函数
匿名函数不带名称,不能被提前声明,也分为带参不带参,带返回值不带返回值类型。
例如:
var method_n=function (){
代码
}
method_n();
6、自执行函数
自执行函数也是匿名函数,它可以自动执行。
例如:
(function (){
console.log(1);
})();
在函数最后加一个()表示为“我调用我自己”。
三、运算符
JavaScript中运算符有:算术运算符、逻辑运算符、比较运算符
1、算数运算符
“+”:算数加;
“-”:算数减;
“*”:算数乘;
“/”:算数除;
“%”:取余;
“++”:自增;
“- -”:自减;
注意:x++表示先运算后自加,++x表示先自加后运算,- -自减也是如此。
“=”:赋值;
“==”:等于,值相同,类型不定;
三个等号则表示值和类型都相同。
2、逻辑运算符
&&:与;
||:或;
!:非;
&:位运算(二进制);
3、比较运算符
“>”:大于;
“<”:小于;
“>=”:大于等于;
“<=”:小于等于;
“!=”:不等于;
四、常用语句
语句标识符是保留关键字不能作为变量名使用。
1、if语句
语句结构:
if(){
代码
}else{
代码
}
()里放的是条件:ture或者false(0代表false,非0代表ture)
2、switch语句
语句结构:
switch (type) {
case “”:
代码;
break;
case “”:
代码;
break;
default :
代码;
break;
}
3、while和dowhile
当条件语句为 true 时,执行。
语句结构:
while(){
代码;
}
do{
代码;
}while();//就算为false,也会执行一次。
4、for语句
语句结构:
for(var i=?;i<?;i++){
代码;
}//可嵌套
注意:break 跳出当前的for
continue 执行后续
5、三元逻辑符
语句结构:
条件?true:false
五、DOM获取方案
通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。
1、DOM元素的获取(8种)
动态获取(4种):
标签名获取:
var dom1=document.getElementsByTagName(“button”);
console.log(dom1[0]);//htmlcollection 集合类型 [index] 获取元素
类名称获取:
var dom2=document.getElementsByClassName(“btn”);
console.log(dom2);//htmlcollection 集合类型 [index] 获取元素
name名称获取:
var dom3=document.getElementsByName(“but”);
console.log(dom3);//NodeList 集合 [index] 获取元素
id名称获取:
var dom4=document.getElementById(“btn_1”);
console.log(dom4);//object 单个对象
固定获取(2种):
初始化页面有几个元素 获取几个 后期动态添加的不能直接获取。
单个获取:
var querybtn=document.querySelector(".btn");
console.log(querybtn);
多个获取:
var queryall=document.querySelectorAll(".btn");
console.log(queryall);//nodelist集合 [index] 获取元素
提供了两个固定元素的获取:
//body
console.log(document.body);
//html
console.log(document.documentElement)
六、DOM元素添加几种方案
DOM元素的事件:
鼠标事件:mousedown mouseup mouseover mousemove mouseleave mouseout mouseenter
键盘事件:keydown keyup keypress
表单事件:blur focus change
浏览器事件:load error resize
触屏事件:touchstart touchmove touchend
注意:js的事件在使用的时候要带on,例如:onmousedown;
绑定事件的方式:
1、dom元素直接绑定事件(在元素内直接添加事件,行内同类型事件只能绑定一次)
function msg() {
console.log(“按钮”);
}
function down() {
console.log(“down”);
}
2、直接动态绑定事件 (先获取dom 再绑定事件)
var regest = document.querySelector("#btn");
regest.onclick = reg1;
3、事件的监听(监听事件类型不带on)
regest.addEventListener(“click”, method1);
function method1() {
console.log(“huitiao”);
}
注意:addEventListener 监听事件中第三个参数不写,默认是事件冒泡,第三个参数默认为false=冒泡,true=捕获。
例如:regest.addEventListener(“click”, method1);//冒泡
regest.addEventListener(“click”, method1,false);//冒泡
regest.addEventListener(“click”, method1,ture);//捕获
冒泡是指先触发内部元素事件,再触发外部元素事件。
捕获是指先触发外部元素事件,再触发内部元素事件。
事件执行参数:event
1.event.stopPropagation();
阻止了事件冒泡,但不会阻击默认行为
2.return false;
阻止了事件冒泡,也阻止了默认行为
3.event.preventDefault();
不阻击事件冒泡,但阻击默认行为
七、总结
每学习一段时间返回来总结回顾一下,会有很多新的收获,有些之前没有遇见的问题也都渐渐浮出水面。还是那句话,多练习才会更深刻。