深入浅出的JavaScript 面向对象的特性
javascript 王者归来
javascript不支持函数或方法的重载,只会覆盖
function add(number){ alert(number + 10);}function add(number){ alert(number + 20);}add(20); // 40
javascript中,函数就是对象,JavaScript中有个内置的对象Function
因为定义一个add方法时相对于
var add = new Function("number","alert('hello')");var add = new Function("number","alert('world')");
所以后面的覆盖了前面的,所以没有重载
javascript是动态语言,不是编译语言,是解释语言
NaN not a number
函数中都有一个内置对象arguments
alert(add.length); //期望的参数长度
函数就是对象
JavaScript中有五种原始值:Undefined,Null,Boolean,Number,String
java中有8中基本数据类型:
byte b; 1字节
short s; 2字节
int i; 4字节
long l; 8字节
char c; 2字节(C语言中是1字节)
float f; 4字节
double d; 8字节
boolean bool; false/true
Undefined数据类型的值只有一个:undefined
var s;
alert(s); //undefined。
Null数据类型的值只有一个:null
alert(typeof null); //object
Boolean数据类型的值只有两个:true,false
typeof的返回值有五个:undefined,boolean,number,string,object
对于函数来说,如果其不返回值,那么其返回值就为undefined
function test(){ alert("");}alert(test()); //undefined 没有返回值alert(test); //打印函数的源代码
var s ;alert(s); //undefinedalert(s2); //s2没有定义,报错
var s ;alert(typeof s); //undefinedalert(typeof s2); //undefined//null与undefined的关系: undefined实际上从null派生而来alert(undefined == null)
javascript会出现内存泄漏,客户端内存泄漏。所以在函数中都要加入var,防止内存泄漏
强制转换有三种:Boolean(value),Number(value),String(value)
Object所有类的父类
o.name = "langsin";
delete o.name;
js的作用域(对于函数定义中的变量来说,加var表示局部变量,不加var表示全局变量在javascript中没有块级别的作用域)
function test(){ s = "hello";}test();alert(s); //hello
function test(){ var s = "hello";}alert(s); // s没有定义,
//js的作用域function f(props) { for(var i=0; i<10; i++) {} alert(i); //10 虽然i定义在for循环的控制语句中,但在函数 //的其他位置仍旧可以访问该变量. if(props == "local") { var sco = "local"; alert(sco); } alert(sco); //同样,函数仍可引用if语句内定义的变量 } f("local"); //10 local local var sco = "global"; function print1() { alert(sco); //global } function print2() { var sco = "local"; alert(sco); //local } function print3() { alert(sco); //undefined var sco = "local"; alert(sco); local } print1(); //global print2(); //local print3(); //undefined local
前面两个函数都很容易理解,关键是第三个:第一个alert语句并没有把全局变
量"global"显示出来,而是undefined,这是因为在print3函数中,我们定义了sco局部变量(不管位置在何处),那么全局的
sco属性在函数内部将不起作用,所以第一个alert中sco其实是局部sco变量,相当于:
function print3() { var sco; alert(sco); sco = "local"; alert(sco); }
从这个例子我们得出,在函数内部定义局部变量时,最好是在开头就把所需的变量定义好,以免出错。
var scope = "global" //定义全局变量 function print() { alert(scope); } function change() { var scope = "local"; //定义局部变量 print(); //虽然是在change函数的作用域内调用print函数, //但是print函数执行时仍旧按照它定义时的作用域起作用 } change(); //golbal
整理的比较乱
