1.变量是一种为数据创建引用的方式。目的是可以通过变量名多次访问该数据。
- 在函数中,如果某传入的参数被多次访问,则应该先将数据赋值给局部变量。
2.JS的数据类型分为两种:原始类型和对象类型。原始类型包括数字、字符串、布尔值、null、undefined。
- 数组是特殊的有序对象;函数也是具有相关联可执行代码的特殊对象。
3.JS不是一种强类型语言,而是松散类型/动态类型。因此变量在不同时候可以根据不同的上下文保存不同数据类型。
- 传入变量的参数类型不是固定的。
4.JS没有块级作用域,只有全局作用域和函数作用域。
- 以下代码,在不同位置定义了i,j,k,他们都是在同一个作用域内。
function test(o){
var i=0;
if(typeof 0=="object"){
var j=0;
for(var k=0;k<10;k++){ //k在函数体内有定义,不仅在此循环
console.log(k) //输出数字0~9
}
console.log(k) //k已经定义了,输出10
}
console.log(j) //j已经定义了,但是可能没有初始化(变量提升)
}
5.任意JS的值都可以转换为布尔值。undefined,null,0,-0,NaN," "都会被转化成false.
- 因此想判断是null,0," "的时候可以用if(o)...想区分三者时用if(o!==null)
6.对对象使用toString()方法,({x:1,y:2}).toString() //=>"[Object Object]"
- 所以console.log("data:"+data)打印结果为"data:[Obj Obj]"
7.有4种方式调用JS函数:作为函数、作为方法、作为构造函数、通过call()和apply()方法间接调用
- 以函数形式调用的函数通常不使用this关键字
- 方法和this关键字是面向对象编程范例的核心。
- 以方法形式调用的函数用关键字this调用上下文。方法即保存在某对象的属性里的函数,函数体使用关键字this引用该对象
- 联想到angularjs中$scope定义函数。所以$scope首先是一个JS对象
//为js对象定义方法
o.m=function(){...}
//为$scope定义方法
$scope.m=function(){...}