js:是一个编程语言,允许用户在浏览器页面上完成复杂的事情
一个完整的Javascript包括核心(ES5),应用程序编程接口即API (比如 DOM,BOM),以及
其他第三方API。JavaScript与HTML、CSS一同配合共同完成一个复杂页面的显示。
JavaScript特殊的地方在于它也可以作为服务器端代码执行,但是需要搭建Node环境。
是一种解释性语言(无需编译),(弱类型语言)从上往下顺序解析执行。
类型:内部js<script></script>
外部js<script type="text/javascript" src=""></script>
注释:ctrl+/ ----> 单行// 多行/* */
关键字(在js中有特殊功能):
do try typeof case else new var
switch while this function with
保留字(将来可能成为关键字):import public
变量: 定义变量时使用var关键字。可以用来保存任何类型的数据。
声明 var message;
初始化 message = "hello"
声明并初始化 var message = "hello";
定义多个变量 var message= “hello”,found=false, age = 29;
对象:由键值对组成,通过使用大括号将所有键值对括起来var dog={name : 'Spot', breed : 'Dalmatian'}
数组:是一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括 起来
例:var myNameArray =[];
函数:是代码执行单元,用于实现某些特殊的功能。例:function add(a,b){return a+b;}
命名:变量名由字母,数字,下划线以及$组成
驼峰命名规则:第一个单词首字母小写,剩余单词首字母大写
数据类型:undefined(未定义类型)/Null(空引用数据类型)/Boolean(布尔类型)
/Number(数字类型)/String(字符串类型)/引用数据类型
在JS中,所有的数字统一使用Number来表示
Number:(按数字精度划分):整数(int),单精度(float),双精度(double )
整数:(按数字的表示方法划分):二进制,八进制(首位为0),十进制,
十六进制(首位为0x)(ABCDEF代表10-15)
进制:十进制-->其他进制:以十进制数值除去其他进制的数值就可以,将余数倒叙写就可以
其他进制变十进制:例:八进制数1507转十进制-->1*8^3+5*8^2+0*8^1+7*8^0=839
浮点数:科学计数法:3.125e7即31250000
非数值(该数值表示一个本来要返回数值的操作数未返回数据的情况):var a=10/'a'; //a为NaN
非数值检测(判断参数是否“不是数值”):当参数para不是数值的时候返回true;isNaN(NaN); //true
数值范围:计算结果超过js数值范围返回infinity var a=9/0 //infinity
数值范围检测:isFinite()函数 var a = isFinite(9/0); //false
Null:如果一个变量准备将来保存对象,可以将该变量初始化null而不是其他,这样可以
通过检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
例: if(car !=null ){ //car对象执行某些操作}
Undefined:该类型只有一个值undefined。
对未声明和未初始化的变量执行typeof操作符都返回undefined。
例:var a; console.log(a); console.log(typeof a); // undefined
String:字符串。字符串可以由双引号或者单引号表示
通过length属性获取字符长度
typeof:检测一个变量是否存在,是否有值。
同一个标识符的情况下(声明的名字一样),变量声明与函数声明都会提升;函数声明
会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值
那么变量优先级高于函数。
一元运算符:
var a = 3; a++; //4 a--; //3
(*=,/=,%=,+=,-=)var a = 4; a+=3; //a = a + 3;
比较运算符产生结果:Boolean类型
==是否值等于 ===是否恒等于(值、数据类型)
!=是否值不等于 !==是否不恒等于
逻辑运算符:与&&:.如果两边条件都为true,则结果为true
或||:如果有一边条件为true,则结果为true
非!:先将任意类型的数值转换为Boolean,然后取反.
连用两次逻辑非 ,就可以将任意数据类型转化为Boolean类型
!a //true !!a //false
三目运算符:return m>n?m:n; //如果m>n为true返回m,如果m>n为false,返回n
类型转换:toString()函数:除了null,undefined,其他三种基本数据类型的变量均有一个
toString()函数,该函数可以获取该变量 指定值的字符串表示
Boolean()函数:任意其他数据类型都可以转换为布尔类型。
parseInt()函数:如果转换的值是null,undefined,boolean,均转换为NaN
Number()函数:
加法:true + false; //1;Number(true)+Number(false);
true + 1; //2;Number(true) + 1
当m,n有一个为String,无论另一个操作数为何(但不为对象)
都要转换为String,然后再进行拼接
Var stu={id=”45”,
id:1001,
//匿名函数:没有函数名的函数
sayId:function(){
console.log(id);id作用域:函数内部
Console.log(this.id);id作用域:stu集合内部
}}
this:方法与属性之间进行沟通
匿名函数:没有函数名的函数
stu4.sayId();//1001
stu4.sayId;//没有函数的执行过程
console.log(stu4.sayId);//console.log(id);id作用域:函数内部Console.log(this.id);id作用域:集合内部
函数表达式:将一个匿名函数(没有函数名的函数)赋值给一个函数变量.
解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码之前可用;当执行器执行到函数表达式的代码的时候才会真正的解释执行
JSON.stringify(obj) //将对象序列化为Json字符串,只能序列化对象可枚举的自有属性。
JSON.parse(jsonStr)//反序列化
var obj1=new Object();
obj1.id=1001;//新增成员
var obj2={};
function print(){console.log('print');}
print();//print
obj2.print=print;//不要加圆括号,否则保存的是函数的执行结果
var obj={_year:2000};
//预定_开头是不可操作、不可读的变量:系统级别的变量
循环:
while(){}
do{}while()
for(){}
switch(){
case1:;
}
break:立即跳出循环体;continue:立即结束当前循环,进入下一次循环。
构造函数:var person = new Object()
person.name=“”;
person["name"]
原型链:
var obj=new Object();
var str=new String();
console.log(obj.__proto__ ===Object.prototype);
console.log(obj.__proto__ === str.__proto__.__proto__);
console.log(Object.prototype ===str.__proto__.__proto__);
console.log(Object.prototype === String.prototype.__proto__);
console.log(str.__proto__.__proto__ === String.prototype.__proto__);
遍历:增强版for循环 for..in
检测属性:
in 检测某属性是否是某对象的自有属性或者是继承属性
hasOwnProperty()检测给定的属性是否是对象的自有属性,对于继承属性将返回false
propertyIsEnumerable():检查给定的属性在当前对象实例中是否存在
Object 类型所具有的任何属性和方法也同样存在于其他对象中,任何对象继承于Object对象。Object中常用的方法:
hasOwnProperty()检测给定的属性是否是对象的自有属性,对于继承属性将返回false
propertyIsEnumerable():检查给定的属性在当前对象实例中是否存在
constructor:保存用户创建当前对象的函数
toString():返回对象的字符串表示
valueOf():返回对象的字符串,数值,布尔值的表示。
key值保存的是可以被遍历访问到的属性名称
for(var key in obj){
Console.log(obj[key])
Delete obj[key]
}
Obj=null;
例:
var obj={id:1001,name:'zs',add:function(){console.log('add');}}
for(var k in obj){
delete obj[k];
}
console.log(obj);
[]用法:key命名有特殊符号;变量值保存的是对象的Key值
函数调用:调用方法: 函数名(实参列表);
函数名.call(执行环境对象,实参列表);
函数名.apply(执行环境对象,实参列表数组);
function sayName(c1,c2){
console.log(this.name+"\t"+c1+"\t"+c2);
}
sayName("red",'green');
sayName.call(this,'red','gree');
sayName.apply(this,['red','green']);
函数的内部属性
只有在函数内部才能访问的属性。
arguments : 类数组对象,包含着传入函数中参数
arguments.callee:用来指向拥有这个arguments对象的函数
this: 指向的是函数赖以执行的环境对象
this指代全局时,指向的是浏览器:window node:global
var add = function(num1,num2){
return num1+num2;
}
var obj = add(10,20);
return :1.可以将函数内部的值返回给外部,2.函数执行结束
具体应用小实例:
function mySetTimeOut(fn,seconds){
console.log("sleep 了"+seconds);
fn();
}
mySetTimeOut(function(){
console.log("换下一张图片");
},100);
//sleep了100
//换下一张图片
数组:
使用Array构造函数
var arr = new Array();
var arr = new Array(20); // 预先指定数组的大小
var arr = new Array("terry","larry","boss"); //传入参数
var arr = ["terry","larry","boss"];
var arr = [] //空数组
索引:var arr = ["terry","larry","boss"];
arr[0] ; //访问数组中第一个元素,返回值为terry
var arr = ["terry","larry","boss"];
arr[3] ="jacky"; //添加元素,数组程度变为4
检测:Array.isArray()
数组序列化: toString() 在默认情况下都会以逗号分隔字符串的形式返回数组项
join(); 使用指定的字符串用来分隔数组字符串
例:var arr = ["terry","larry","boss"];
arr.toString() //terry,larry,boss
arr.join("||"); //briup||terry||jacky
栈:push() 可接受任意类型的参数,将它们逐个添加到数组的末尾,并返回数组的长度 pop()从数组的末尾移除最后一项,减少数组的length值,返回移除的项
队列:shift() 移除数组中的第一个项并且返回该项,同时将数组的长度减一。
unshift() 在数组的前端添加任意个项,并返回新数组的长度。
排序:reverse() 反转数组项的顺序
sort() 默认排序:该方法会调用每个数组项的toString() 方法,然后按照字符序列排序
常用迭代:forEach() 对数组中的每一运行给定的函数,没有返回值,常用来遍历元素
闭包()()
例:addEventListener('click',(function(num){
return function(e){
alert(num);//if(num==1)
}
})(i))