之前没有很系统的学习javascript,在学习过程中收录了一些有用的资料,供以后查阅使用。不断补充。
1、 js的引用指向的只能使用具体的对象,而不是另外一个引用。对个变量能够指向同一个对象。
2、 函数重载和类型检查
Js的每个函数都带有一个仅在这个函数范围内作用的变量称为参数,它是一个包含所有传给函数的参数的伪数组,所以它并非真正意义的数组(也就是说你不能修改它,也不能用push()来添加新元素),但是可以访问其中的元素,它也有.length属性。
function sendMessage(msg,obj){
if(arguments.length == 2)
obj.handleMsg(msg);
else
alert(msg);
}
//传一个参数,直接显示信息
sendMessage("Hello world");
//也可以将自定义的一个对象传入,用另外一套方法显示信息
sendMessage("How are you?",{handleMsg : function(customMsg){
alert("This is a custom massage:"+customMsg);
}
});
//一个接受任意数量的参数并将其转化为数组的参数
function makeArray(){
var arr = [];
for(var i=0;i<arguments.length;++i)
arr.push(arguments[i]);
return arr;
}
还有一个用来判断传入参数类型的方法。如果没有提供参数,它的类型必为undefined。第一种方法是使用typeof操作符。
function displayError(msg){
if(typeof(msg) == "undefined")
alert("argument absent!");
else if(typeof(msg) == "string")
alert("type of argument is string");
}
displayError();
displayError("aaaa");
使用typeof判断类型,当变量不是object或array时,是最完美的解决方案了。但是,对于自定义对象,如user,typeof就只能返回object,很难与其他object区分开来。第二种检查类型的方法。需要引用所有js对象都带有的一个属性,称为构造函数constructor。
if(num.constructor==String)
num = parseInt(num);
if(str.constructor==Array)
str = str.join(",");
变量 | typeof(变量)(都是字符串类型) | 变量.constructor |
{an:”object”} | object | Object |
[“an”,”array”] | object | Array |
function(){} | function | Function |
“a string” | string | String |
55 | number | Number |
true | boolean | Boolean |
new User() | object | User |
3、作用域(scope)
1)在js里,作用域是由函数划分的,而不是由块划分的。
2)基于浏览器的js的一个有趣的特性是,所有属于全局作用域的变量其实都是window对象的属性。
3)另外,当变量缺乏声明时,它就是全局的,而不管它位于函数内或者块内。