您的位置:首页 > Web前端 > JavaScript

JS中括号的用法

2015-12-12 20:16 513 查看
我们在一些JS代码中经常可以看到这样的用法 :

(function(){})();

那这些括号是做什么用的呢?

下面我们来测试一下就知道了

(function(){alert('zol');});

运行后,没有反映

(function(){alert('zol');})();

运行后,弹出 zol

(function(){alert('zol');})(alert('wiki'));

运行后,先弹出wiki,再弹出zol

(function(){alert('zol');})(alert('wiki'););

出错,什么也不运行。

我们从第二个可以看出,第一个括号中的匿名函数执行了,说明第二个括号是用于执行操作,这和我们调用函数的用法一样,比如定义了一个function a(){};我们调用a这个函数是 a();那么a就和这个例子中的第一个括号代表的意思相同,是一个函数体,只是没有名字,我们也叫他匿名函数。
第三个代码中先弹wiki,说明alert('wiki')是先执行,这个是做为第一个括号的函数的参数来运行了,如果给参数后加分号,当然就出错了,所以第四个代码就不运行了。

不考虑[]用作数组或集合下标使用的情况,单针对某个对象,这两种写法本质是一样的。

但是第2种写法可以使用变量作为属性名,在实际使用过程中非常灵活,比如可以写出很通用的代码,而不用考虑具体对象的结构。

追问:

那为什么有时候,用点才能取到值,有时候却要用中括号呢?


追答:

不考虑[]用作数组或集合下标使用的情况,单针对某个对象,这两种写法本质是一样的。

你能举个例子, 只能用点或只能用中括号取属性值吗?


评论|26

分享

2015-07-28 15:52奇七默默|一级

var test ={name:1}

用点的时候,后面需要是一个指定的属性名称,譬如说 test.name,不需要用引号括起来,因为默认name就是test里面的属性,但是如果写 var obj = name 。test.obj就是不正确的,因为obj这个时候是被当成一个固定的字符串,不是变量。

用中括号的时候 ,括号里面可以是变量或者字符串,譬如说,var obj = "name",test[obj]会自动识别成obj["name"],因为中括号会计算一次生成字符串访问。当然可以直接写obj["name"],

其实 test.name 最终也会按照 test["name"]去执行的

所以用点的时候后面一定要是一个指定的 属性名,用[]时候后面一定是一个变量或者固定属性名的字符串。

有误请指正,谢谢!
评论|70

分享

2014-09-23 11:27幻想武士|八级

木有区别。都是取值(设置值)。可以说是一个习惯用法。如果用[]的话,就有点小小区别了。如果[]用于集合或数组,则是获取[i]里面的第i个值。所以。[]在对象或数组(集合)中这样用。对应于对象,建议用"."获取或设置。如果对象用[],则是获取或设置["age"]里面属性叫age所对应的属性值

追问:

那为什么有时候,用点才能取到值,有时候却要用中括号呢?


评论|01

分享

2014-09-23 11:26猫疫2|三级最快回答
a.b中a是json对象,b是a中的属性名。a[b]中a是数组对象,b是a的数组索引,即a中第b个元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: