原生JS:
1,ECMAScript的:规定了JS语言的核心语法的标准
1.ES3,ES5,ES6(2015),
2.JavaScript:网景(Mozilla的火狐)参照ES标准实现的JavaScript的语言版本,
3.JScript微软参照ES标准实现的JavaScript的语言版本。
2,DOM:专门操作网页内容的API,比如文件撰写(...)向网页内容中输入一行话。
3,BOM:专门操作浏览器窗口的API,比如警报,提示弹出浏览器的提示框。
变量:
声明:
1.字母,数字,下划线和$组成,但不能以下划线开头,
2.不能使用保留关键字,
3.见名之意,
4.驼峰命名法。
var variable量名1,变量名2,等;
只声明未赋值的变量都是不确定的。
赋值:变量名=值;
特殊:如果强行给未声明的变量赋值
普通模式:不会报错,会在全局创建该变量,导致全局污染。
严格模式:禁止给未声明的变量赋值,报错,变量未定义,在代码段顶部插入“use strict”;
简写:var变量名=值;
常量:
声明:const常量名=值;
强调:常量名必须全大写,创建常量时必须立刻赋值。
数据类型:
原始类型:字符串,数字,布尔值,null,未定义。
引用类型:值无法保存在变量本地的复杂数据类型,变量名仅保存储存空间的地址。
串:
储存的unicode码中,
“0〜9” 为 “48〜57”
“A〜Z” 为 “65〜90”
“A〜Z” 为 “97〜122”
汉字为 “\ u4e0” 〜 “\ u9fa5”
数:
专门储存数字(包含小数和整数)的类型。
布尔:
专门表示判断结果的,只有两个值:真或假的。
空值:
空,专门给程序员手动清空一个变量用。
未定义:
空,专门由程序自动为一个变量赋初值用。
数据类型转换
隐式转换:
无需程序员干涉,程序自动完成的类型转换。
强制转换:
转换为数字:
parseInt函数();将括号中的数据转换为数字类型的整数。
parseFloat();将括号中的数据转换为浮点数(小数)。
转换为字符串:
x.toString();将X转换为串类型。
串(X);将X转换为串类型。
转换为布尔:
布尔(X)将X转换为布尔类型。
运算符和表达式
算数运算符:
+, - ,*,/,%
%:取除不尽的余数部分,取余数或判断能否被整除等,如:判断奇偶数或判断是否是闰年。
关系运算符:
>,<,> =,<=,!==,===,isNaN(NUM)判断NUM是不是数字。
逻辑运算符:
&&,||,!,短路逻辑
在逻辑运算中,如果前一个条件已经可以得出结论,则后续代码不在执行。
短路逻辑&&:如果前一个条件为假,则后续条件不再执行,直接返回假的。
短路逻辑||:如果前一个条件为真,则后续条件不在执行,直接返回真。
短路逻辑&&:条件&&(操作),满足条件执行,不满足不执行。
短路逻辑||:值1 ||默认值,如果值1转为布尔后为假,才使用默认值为备用。
位运算:
<<按位左移,>>按位右移
不声明第三个变量,交换两数字的值一个^ = B,B ^ = A; A ^ = B;
赋值运算:
一个+ = B,α-= B,A * = B,A / = B,A%= B
函数
声明函数:
函数函数名(参数列表){
函数体;
返回返回值;
}
调用函数:
var返回值=函数名(参数值列表);
作用域:
全局作用域:窗口
局部作用域:函数内部
使用顺序:局部>全局,全局没有报错。
声明提前:在程序执行之前,将所有VAR声明的变量和函数声明的函数,
提到当前作用域的顶部,集中创建,但赋值会留在原地。
解决:
1.尽量将变量或函数的声明集中在当前作用域顶部创建。
2.用让代替变种
用let函数名=函数(...){...}代替函数(...){...}
按值传递:
在两变量赋值时,或将变量作为参数传入函数时,仅将原变量中的值复制一份给对方
影响:
1.如果按值传递是原始类型的值,在函数中修改新变量,不会影响原变量
2.如果传递的是引用类型的对象,在函数中用新变量修改对象,等效于直接修改原对象。
全局函数
ES标准中规定的,不需要任何前缀就能可以直接调用的函数。
如:
1.Number(),字符串(),布尔(),isNaN(),parseInt函数(),parseFloat();
2.encodeURI();对统一资源标识符进行编码,并返回编码后的字符串。
2.decodeURI();对已经编码的URI进行解码,并返回解码后的字符串。
3.encodeURIcomponent();在是encodeURI();的基础上,允许对特殊字符进行编码
3.decodeURIcomponent();解码特殊字符
4.eval();执行字符串表示的JS代码。
分支结构
循环结构
数组
创建数组:
var arr = new Array();
var arr = [];
访问数组:
ARR [I];
。长度属性:
固定套路:
获取倒数第Ñ个元素ARR [arr.length-N];
末尾追加一个新元素ARR [arr.length] =值;
删除末尾一个元素arr.length--;
删除末尾Ñ个元素arr.length-N;
清空数组arr.length = 0;
垃圾回收:
1.垃圾:不再被任何变量使用的对象,
2.垃圾回收:程序会自动释放不再被任何变量使用的垃圾对象的内存空间,
3.为什么:内存空间是有限的,内存占用越多,程序运行越慢,
4.垃圾回收器:JS引擎中,专门监控,并释放垃圾的小程序,
5.如何:
1.垃圾回收器伴随主程序在后台并行执行,
2.垃圾回收器会记录每个对象被几个变量使用着,
3.只要发现一个对象,不再被任何变量使用,就释放该对象所占内存。
6.建议:只要一个变量不再使用,主动赋值为空。
索引数组遍历:
for(var i = 0; i <arr.length; i ++){
ARR [I];
}
关联数组:
创建:
var arr = [];
ARR [ “键”] = “值”;
访问:
键;
ARR [键]。
遍历:
for(var key in arr){
arr [key];
}
数组API:
转字符串:
串();
arr.join( “连接符”);判断空数组:arr.join( “”)=== “”;
拼接和选取:
arr1.concat(值1,值2,ARR2);
arr.slice(starti,恩迪+ 1);
将类数组对象转化为数组对象:Array.prototype.slice.call(参数);相当于arguments.slice();
修改数组:
删除元素:arr.splice(starti,N);
插入元素:arr.splice(starti,0,值1,值2,.....);
替换:arr.splice(starti,0,值1,值2,....);
广告轮播:var imgs = imgs.concat(imgs.splice(0,n));
var imgs = imgs.splice(-n).concat(imgs);
翻转:arr.reverse();
排序:arr.sort((a,b)=> ab);
结尾入栈:arr.push(值) ;
结尾出栈:var last = arr.pop();
开头入栈:arr.unshift( “值”);
开头出栈:var first = arr.shift();
二维数组:
遍历:
for(var r = 0; r <arr.length; r ++){
for(var c = 0; c <arr [r] .length; c ++){
arr [r] [c];
}
}