1、slice、substr、substring区别
先看参数
substr(start, length)、slice(start, end)、substring(start, end)
其中substring的参数,会把负数全部当做0;
由于substr的第二个参数为要截取的长度,所以不能为负数,负数会当做0;
其他情况下,substr和slice的参数中,负数就是倒数
2、call、bind、apply区别
先看参数
call(obj, arg1, arg2...)、bind(obj, arg1, arg2...)、apply(obj, args)
call和apply都是把函数内的this对象指向obj参数,并运行调用这个方法的函数。call的后面的参数是一个个列出来,而apply是把所有参数放到数组里传入
bind用来返回一个新函数,而新函数中的this指向obj参数,后面的参数会全部传给原函数的参数,之后的新函数,变不可以再传该参数了
3、offset高宽位置
1、offsetParent:元素的父级元素中,第一个position为relative的元素。没有的话,则为body。所以offsetParent并不一定等于parentNode
2、offsetHeight、offsetWidth:等于:可见(如果出现滚动条,则看不到的区域不算)内容区高宽+padding+border,可以说是样式中的height+padding+border
3、offsetLeft、offsetTop:元素的边框之外距离offsetParent的边框之内的距离。所以,如果需要知道元素距离body的left和top,必须把offsetLeft或offsetTop与offsetParent的相同属性相加,并一直循环加到body

4、client高宽位置
1、clientHeight、clientWeight:可见内容区高宽+padding,同时也等于:offset高宽-滚动条的宽度-border
2、 clientLeft、clientTop:分别等于左边框的宽度和上边框的宽度?
5、scroll高宽位置
1、scrollHeight、scrollWidth:元素在没有滚动条的情况下,元素内容的总高宽。把height设置为auto时,scollHeight = clientHeight = (offsetHeight - border - 横向滚动条宽度)
2、scrollLeft:元素左侧不可见区域的宽度。滚动条在最左边时,scrollLeft == 0,滚动条在最右边时scrollWidth == scrollLeft + clientWidth
6、event.target和event.currentTarget
currentTarget表示事件是注册到该元素上的,target则表示实际触发事件的元素。
比如:在body上注册一个click事件,当点击页面中的一个按钮时。currentTarget === body,而target === 按钮元素
7、鼠标事件中的鼠标位置
clientX(Y)始终是鼠标相对于浏览器窗口(不包括浏览器的工具栏,不管是否有滚动条)的位置
pageX(Y)鼠标相对于整个页面的位置,当整个页面没有出现滚动条时,总是等于clientX(Y)
screenX(Y)相对于电脑屏幕的位置
offsetX(Y)相对于target元素的位置