JS逗号、冒号与括号
2014-01-25 00:35
155 查看
JavaScript面试时候的坑洼沟洄——逗号、冒号与括号
看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧。逗号
逗号我们常见的用法就是在连续声明一些变量的时候,可以少些很多var``` function fbn(name,title){} var person={ name:"Byron", age:"24" }; ``` 然而我们也会遇到这样的问题,在赋值表达式中出现的逗号
冒号
?:运算符其实冒号还有个作用:声明label,JavaScript中语句可以有个标签前缀,我们称之为标记语句,break或continue可以和标记的语句结合使用,控制流程。如果标签有重复,就会出错。我们上面的语句可以翻译成这样
大括号
对象直接量声明函数声明或者函数直接量
组织复合语句
大括号没有带来块级作用域
熟悉JavaScript的同学肯定对这点儿已经熟知了,大括号虽然能够组织复杂的语句等,是指算是同一“块”,with甚至提供了相近的功能,但遗憾的使JavaScript只有函数作用域,没有块作用域,再JavaScript中下面做法会声明全局变量,这个小小的知识点往往引英雄竞折腰在function外使用声明变量(无论是否使用var)
在function内不是用var 声明变量
直接赋值于window属性
很多笔试题目正是针对这方面知识出题的
{a:1} JavaScript有传说中的“语句优先”,也就是当大括号既可以被理解为复合语句块也可以被理解为对象直接量的时候,JavaScript会将其理解为复合语句快。{a:1}其实就是 a: 1,想想冒号的作用是不是知道为什么返回值是1了。
var x={a:1} 当{a:1} 作为右值出现的时候,明显就不是语句,而是直接量表达式了,所以把大括号当作对象直接量语法处理,结果是个对象。
{a:1,b:2}; 看了上面这个就简单了,可以翻译为:a:1,b:2 结合逗号和冒号作用,结果似乎显而易见了,就是2嘛。然而其实报错了,这是为什么?在逗号运算符后面必须是表达式,而标签语句十个label statement,是条语句,所以就报错了。
了解了这些知识我们再来试几个题目(看答案在控制台上,不要试图alert)
小括号
在JavaScript中小括号有几种用法函数声明或调用表达式参数表
这个好理解,函数定义的时候需要用小括号将其参数包裹,用逗号隔开,调用的时候也一样
我们常见的if、switch、while中的小括号就是干这个用的
对于简单的json字符串转为对象的时候,因为浏览器兼容性原因,不能使用JSON对象,又懒得引入json2,所以就会用eval()处理,大概写法这样
{
a:1,
b:2
}
上面提到过逗号运算符不能在label statement后面,所以会报错,而加上括号后由于分组运算符只能包含表达式,所以{}变成直接量语法,这样就是我们希望的内容了。
立即调用的函数表达式
再来回头看看我们所谓的立即执行函数,一般有两种写法函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:
函数声明:
function 函数名称 (参数:可选){ 函数体 }
函数表达式:
function 函数名称(可选)(参数:可选){ 函数体 }
其实我们常用的区分方式是根据上下文,如果function fn(){}作为右值出现(赋值表达式右边)那么就是表达式,否则就是函数声明。有几种看起来不常规的方式需要我们注意
中括号
相对而言中括号是个最简单的符号了,一般有几种语义*数组相关
我们知道数组可以通过中括号来直接量实例化
这也是很常见的用法
最后
不总结不知道,一总结下一跳啊,几个小小的符号竟然这么百转回肠,总结完之后才知道自己以前不了解这些知识,死在笔试题上一点儿都不冤,准备换工作的同学也了解一下以备万一吧。参考
Another JavaScript quiz我是如何理解”Another JavaScript quiz”中的题目
JavaScript 匿名函数有哪几种执行方式?
深入理解JavaScript系列(2):揭秘命名函数表达式
相关文章推荐
- JavaScript里的依赖注入
- JS操作字符串转换为数值并取整的代码
- JS cookie乱码问题,啥也不说了,上代码
- JS列表的下拉菜单组件(仿美化控件select)
- JS 去除字符串中的空格
- [DP]NOIP2002/FJSDFZOJ 1081 过河卒
- ExtJs 进度条(轮询)
- JavaScript精简代码 非一般的写法
- js修改原型的属性
- js从后台无法取值问题
- underscore.js
- dede:channel 分页 & JS分页
- JS Math.max() 函数
- JS+JSON 省市区 三级联动 SELECT
- Javascript面向对象编程 产生对象
- JavaScript里的依赖注入
- 设为首页 和 收藏本站js代码 兼容IE,chrome,ff
- json遍历数组LIST
- javascript/JS限制用户名只能输入字母和数字下划线
- JS中typeof与instanceof的区别