六大数据类型
字符串、对象(数组,object,function函数)、null、undefined、数值、布尔
null和undefined的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="div">purplet</div> </body> <script> var a;//undefined var b = document.getElementById('xxxx'); console.log(b); </script> </html>

undefined出现:
1.变量声明但没有赋值
2.获取对象中不存在的属性
3.函数有形参没有传实参,形参的值是undefined
4.函数内部没有return或return后没有任何东西时调用的值是undefined
null出现:
对象不存在
null的数据类型是object,但null并不是object类型
IF条件:
if(1){ }else if(){ }else{ }
循环
for(1;1;1;){ } while(1){ } do{ }while(1);
数组
var arr = [1,2]; var arr = new Array();//使用内置构造函数 var arr = ['a'=>1,'b'=>2];//JS中没有这种形式,PHP里称为关联数组
for循环打印数组内容
for (var i=1;i<=arr.length;i++){ console.log(arr[i]) }
for (i in arr){ console.log(arr[i]); }
function f(value,index,array) { console.log("a[" + index + "] = " + value); console.log(array); } var a = ['a', 'b', 'c']; a.forEach(f);
第三种利用内置函数forEach,进行回调函数打印输出

对象
var obj1 = {name:'purplet',age:20,fun:function(){ alert(222); }}; console.log(obj1.name); console.log(obj1.fun);//只打印这个函数 console.log(obj1.fun());//运行函数内代码,弹窗后返回undefined(函数没有返回值) //其中name,age,fun都是这个对象的属性,

函数声明
f1();//报错,表达式的必须先声明才可引用 f2();//正常执行 //表达式声明 var f1 = function{ } //直接量 var f2(){ } //内置构造函数(基本不用) var f3 = new Function();
再来一个重要知识点
var a=1;//全局变量 function f1(f2){ var a=2;//局部变量 f2(); } //在JS中函数自身的作用域在声明的地方,不在调用的地方 function f2(){ console.log(a); } f1(f2);
输出结果是1,请大家仔细理解。
闭包
var a = 2;
function f1(f2){
var a = 1;
function f2(){
console.log(++a);
}
//由于f1的运行结果是返回f2
//又由于函数作用域链和函数自身作用域的问题
//导致f1运行结束后不能销毁变量
//因此形成了闭包
return f2;
}
var f = f1();
f();
f();
f();
输出2 3 4
面向对象
在JS中父级对象称为原型,Object是所有对象的的父级对象,理论上Object是没有父级对象的,然而Object的父级对象的值是Null(可以理解为无中生有)
原型链:每一个对象都有父级对象,而父级对象就称为原型。
如果在低级对象找一个属性找不到时会向父级对象中寻找,依次向上
var s = '1'; var o = []; var p = {}; function f(){ } console.log(p.__proto__);//object console.log(o.__proto__.__proto__);//object
__proto__是寻找该对象的父级对象