记录一下JS中某些语法点,以及同swift,python等的对比
默认参数(Default arguments)
函数支持默认参数的必要性:从个人经历来看,在开发中特别是组建和公共API的开发中,由于JS松散的类型,特别是函数调用参数不定的特点,屡屡出现的类型检测这样的鸡肋代码让人如鲠在喉,eg:1
2
3
4
5
6
7var add = function(a, b) {
b = typeof b !== "undefined" ? b : 0
return a + b
}
add(1) // 1
add(1,1) // 2
如果使用默认参数,我们就省去了不必要的检测:1
var add = function(a, b=0)
剩余/可选参数(Rest arguments)
正如前边所说,js函数调用很松散,所以可选参数在js上很容易实现,最简单的莫过于使用arguments
,但对其他语言就需要特殊的支持,ES6上显然也是这样认为的,所以:1
2
3function(arg0, arg1, ...rest) {
alert('you pass' + rest.length + 'extra args')
}
说明: 根arguments
对象不同,剩余参数数组rest
是一个真实的数组
jQuery 常见方法
集合类操作相关:对集合类元素的遍历操作已经见怪不怪了,几乎所有的语言都有,比如swift和java中的map,reduce等等,在jQuery中也自然存在:
$.each(obj, function(key, value))
$.map(obj, function(value, index)
:自1.4之前只对数组管用,1.6之后改为所有,按设计规则,常根return$.extend([deep?], target, [obj1, ...])
:对象的合并扩展,默认是浅拷贝,常常用在函数参数的扩展上,这一点倒是根默认参数的设计很契合,可以扩展已有的参数 eg1
2
3
4
5
6// 通过extend扩展已有参数
function(obj) {
var default = {a: 'a'};
var opt = $.extend(default, obj);
console.log(opt);
}
jQuery非典型
当从window对象开始查找时,如果使用jQuery函数会出现问题,eg:1
2
3$(window).on('scroll', function (e) {
var img = $(this).find('img) // find函数只会返回[]
})
visibility: hidden
和display: none
最重要的区别在于: 后者脱离文档流,而前者不是,所有的效果差异都是这一点造成的,如前者会在隐藏的部分保持空白,而后者不会,再如在hidden以后,前者可检测宽高offSet等位置信息,而后者没有,在作页面自动加载时遇到了这个问题,在此记录