首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

学习札记:Javascript真让人晕

2012-11-25 
学习笔记:Javascript真让人晕JS的函数特殊性:JS中的函数可以被当做一种数据类型来看待,是真正的数值,因此

学习笔记:Javascript真让人晕
JS的函数特殊性:JS中的函数可以被当做一种数据类型来看待,是真正的数值,因此可以被存储在变量数组和对象中,也可以作为参数传递给其他的函数,可以被赋值给某个对象的属性。
定义一个概念:函数直接量(function literal),见例子:

//使用函数定义来定义函数function square(x){return x*x;}//使用函数直接量来定义:var squre = function(x){return x*x;}

两者之间的最大差别是函数直接量可以出现在其他JavaScript表达式中。

变量:如果省去var,则隐式声明的变量是全局变量,即便是在方法体中声明的,看例子:
var i=0;function square(x){var j=i;//j=i;}square(i);alert(typeof(j));

    例子中,如果使用var j=i声明j,则j只是方法中的局部变量,所以得到undefined。而如果改成j=i,隐式声明变量为全局变量,得到number。
    另外,在函数体内部,局部变量的优先级比全局变量的优先级要高。函数可以嵌套定义...在函数中声明的所有变量,无论是在哪里声明的在整个函数中他们都是有定义的。读起来好难理解啊,看例子:
function square(x){var i=0;var j=0;for(var k=0;k<10;k++){document.write(k);}document.write(k);document.write(j);alert(i+","+j+","+k);}square(1);//得到0,0,10,而不是0,0,undefined

再看
var param="global";function t(){alert(param);//得到global,全局变量其起作用}t();

var param="global";function t(){alert(param);//得到undefined。其实在这里局部变量param已经定义了var param="local";alert(param);//得到local}t();//函数t中声明了局部变量,局部变量的优先级高于全局变量

觉得不可思议吗?因为JS与C、Java等语言不同,没有块级作用域这个概念,只要在函数体中声明了这个变量,那么再整个函数体中都有它的定义,无论是变量声明前的代码还是变量声明后的代码。区别只是:前面的代码这个变量的值为undefined,而后面的代码可能赋值了。

typeof运算符:检测运算数的类型:
数字、字符串、或者布尔值:返回number,string和boolean对象、数组和null:返回object函数:functionNumber、String、Boolean和Date、RegExp:返回object未定义:undefined

delete运算符:删除运算数所指定的对象的属性、数组元素或变量。如果删除成功则返回true,如果运算数不能被删除则返回false。如用var声明的变量和客户端的属性就不能被删除。如果delete使用的运算数不是存在的属性、数组元素或变量时,它将返回true(或许认为操作后的结果是该变量不存在了,因此可以看做是删除成功,故返回true)。看例子:
var o={x:1,y:2};alert(delete o.x);//删除对象的属性,返回truealert(typeof o.x);//undefinedalert(delete(o.x));//删除不存在的属性,返回truealert(delete o);//o是用var声明的,不能删除,返回falsealert(delete 1);//不能删除一个整数,返回falsex=1;alert(delete x);//可以删除没用var声明的变量,返回truealert(":"+typeof(x));//undefined


void运算符:他可以出现在任何类型操作数之前,它总是舍弃运算数的值,然后返回undefined。这在客户端的javascript:URL中经常使用,如:
<a href="javascript:void window.open();">Open New Window</a>

另外,void(0)和undefined的作用相同,在此void(0)可以看做用于产生undefined。

热点排行