Javascript的组成
主要由ECMA(标准)、BOM(窗口对象模型)、DOM(文档对象模型)3部分组成。
基本概念
基本类型:
undefined、object、string、number、boolean
类型判断:
typeof variable
for-in语句
for(var property_name in obj){
console.log(obj[proprety_name]);
}
变量作用域和内存问题
引用类型的复制
引用类型:就是包含了多个值的那种。
引用类型复制和赋值时,其实跟C语言中的指针一样,真正的对象在堆内存当中。变量保存的都是对那个对象的地址引用。
判断对象类型
有时不光想知道是否Object类型,关键还想知道确切的引用类型。
可以用instanceof if(x1 instanceof People)
作用域
有个坑一定要注意,js中没有块级作用域。
每段代码执行的时候都会有他的作用域环境,作用域环境是用来保证执行代码可以有次序(方向往上)的访问和控制变量的一种设计。
作用域链:
var color = "red";
function x1(){
var color="blue";
alert(color);
}
function x2(){
alert(color);
}
/*画张图更好
-----------全局作用域
--------color
--------x1()作用域
------------color
--------x2()作用域
------------全局作用域
*/
回收内存
标记清除:这是浏览器常用的一种方法。
第一次会给所有变量这些打上标记,
第二次会给那些进入了环境和那些被引用的对象去掉标记,
第三次释放那些打上了标记的变量(隔时执行)。
良好的习惯:给不用了的引用类型变量,设为null。这样下次他就会把对象给回收。
引用类型
Function类型
函数也是一种对象!!!
函数的一些属性:
arguments:类似数组,接受了函数的实参。可用数组方式访问。
arguments.calle:代表函数本身。
this和caller:都是代表函数的执行对象。
length:形参的长度。
函数的一些方法:
apply()方法:
var name = 'trump';
function callSayHi(name){
sayHi.apply(this,[name]);
}
function sayHi(){
alert(this.name);
}
sayHi.apply(this); //alert trump
callSayHi('kk'); //alert kk
apply和call就是接受参数不同而已
Array()
创建形式:
- var arr = new Array();
- var arr = new Array(20);
- var arr = Array();
- var arr = Array(20);
- var arr = [1,'str',false];
判断是否数组:
Array.isArray(x1);
length属性:
可读取可修改,你懂得。