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个元素
(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个元素
相关文章推荐
- 201512122009_《JavaScript——样式操作(float)》
- JS触发按键事件
- jwt(json-web-token)在rest中的实现--jersey
- JavaScript、CSS、HTML 实现用户注册页面与信息校验
- js事件(Event)知识整理
- 链接<a>执行JS
- HTML5之javascript(一)
- 2015/12/12--javascript事件处理和部分高级javascript实例
- js特效-仿照html属性title写一个弹出标题样式
- 如何js编译的文件dll对于网页电话
- 跨域问题小记以及jsonp简谈
- JS开发者调查
- JSON和XML解析等区别
- js 常用小功能
- javascript下的DOM命令:css,href,arc
- javascript自定义函数
- 轻松学习JavaScript十四:JavaScript的RegExp对象(正则表达式)
- 不可理喻的JSTL标签库
- 学习js,时查看浏览器提示的错误Uncaught SyntaxError: Unexpected token [
- JS获取当前时间