最近在看小程序在看文档的时候,遇到一些基础的js知识,翻找了资料之后记录下来,留待以后查看
事件冒泡与捕获
冒泡从底部往上,而捕获恰恰相反从上往下。
当终止时冒泡和捕获都取当前的`监听事件`《不知道咋形容,就是当前运行的,截止到这里为止》
栗子
capture-bind:捕获
bind:冒泡
<view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2"> outer view <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4"> inner view </view> </view>
当我点击 inner view 时候,这个时候 顺序应该是
handleTap2
handleTap4
handleTap3
handleTap1
先捕获 2 4 然后 冒泡 3 1
| (按位或) 和 ^ (按位异或)
两者在一定程度上是相同的,都是有一个值为真值的时候,就返回`true`
MDN上进行了相应的描述,
按位或: 将任一数值 x 与 0 进行按位或操作,其结果都是 x。将任一数值 x 与 -1 进行按位或操作,其结果都为 -1。
按位异或:对每一对比特位执行异或(XOR)操作。当 a 和 b 不相同时,a
XOR b
的结果为 1。
主要的是还是 ~按位非
有一个公式 -(x + 1)
栗子:
~1 等于 -(1+1) return -2 ~~ 1 等于 -(-(1+1) + 1) return 1 ~2 等于 -(2 + 1) return -3 ~~2 等于 -(-(2+1) + 1) return 2 一般与 indexOf 配合使用 var str = 'rawr'; var searchFor = 'a'; // 这是 if (-1*str.indexOf('a') <= 0) 条件判断的另一种方法 if (~str.indexOf(searchFor)) { // searchFor 包含在字符串中 } else { // searchFor 不包含在字符串中 } 找不到返回 -1 那么 -(-1 +1) return -0 ; -0 自动转换为 -1 或者取数值,把字符转换为数值,js中有隐式转换,在公式中 +1 * -1 那么该值就自动转换为number
逻辑运算:
与 && :
expr1 && expr2 如果expr1返回false 那么返回expr1,否则返回 expr2
与布尔值一起使用时,如果两个操作数都为true
时&&
返回true
,否则返回false
。
需要注意的是:
a1=true && true // t && t 结果为 true a2=true && false // t && f 结果为 false a3=false && true // f && t 结果为 false a4=false && (3 == 4) // f && f 结果为 false a5="Cat" && "Dog" // t && t 结果为 Dog 当两个值都为true的时候,取后面的值 a6=false && "Cat" // f && t 结果为 false a7="Cat" && false // t && f 结果为 false
或 || :
expr1 || expr2 如果expr1 返回true那么就返回expr1 否则就返回expr2
与布尔值一起使用时,如果任意一个操作数为true
时||返回true
。
需要注意的是:跟上面且有个相反的取值
o1=true || true // t || t 结果为 true o2=false || true // f || t 结果为 true o3=true || false // t || f 结果为 true o4=false || (3 == 4) // f || f 结果为 false o5="Cat" || "Dog" // t || t 结果为 Cat o6=false || "Cat" // f || t 结果为 Cat o7="Cat" || false // t || f 结果为 Cat
非 ! 逻辑非:
如果为true 返回false,false返回true
栗子:
n1 = !true // !t 结果为false
n2 = !false // !f 结果为true
n3 = !"Cat" // !t 结果为 false
null; NaN; 0; 空字符串(""); undefined 这些值都会返回false
逗号操作符:
mdn解释:对它的每个操作数求值(从左到右),并返回最后一个操作数的值
以前从来没有用过这种方式,来个栗子
var x = 0; x ++,x 返回 1
在函数中如果要 return 的话那么就使用(x++,x),调用该函数还是会返回1
感觉非常好用,省了几个代码