学习笔记: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运算符:检测运算数的类型:
[list]
[*]数字、字符串、或者布尔值:返回number,string和boolean
[*]对象、数组和null:返回object
[*]函数:function
[*]Number、String、Boolean和Date、RegExp:返回object
[*]未定义:undefined
[/list]

delete运算符:删除运算数所指定的对象的属性、数组元素或变量。如果删除成功则返回true,如果运算数不能被删除则返回false。如用var声明的变量和客户端的属性就不能被删除。如果delete使用的运算数不是存在的属性、数组元素或变量时,它将返回true(或许认为操作后的结果是该变量不存在了,因此可以看做是删除成功,故返回true)。看例子:

var o={x:1,y:2};
alert(delete o.x);//删除对象的属性,返回true
alert(typeof o.x);//undefined
alert(delete(o.x));//删除不存在的属性,返回true
alert(delete o);//o是用var声明的,不能删除,返回false
alert(delete 1);//不能删除一个整数,返回false
x=1;
alert(delete x);//可以删除没用var声明的变量,返回true
alert(":"+typeof(x));//undefined


void运算符:他可以出现在任何类型操作数之前,它总是舍弃运算数的值,然后返回undefined。这在客户端的javascript:URL中经常使用,如:

<a href="javascript:void window.open();">Open New Window</a>

另外,void(0)和undefined的作用相同,在此void(0)可以看做用于产生undefined。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值