1、数据类型判断
(1)NaN与任何值相等都为假,包含自身。
(2)+的使用:
number +number =数值相加
number+string= 字符串拼接
-的使用:
string-string会先进行number函数的转换,转换不了就为NaN
{} + 'b' > {} + 'a'
+优先级高于> 拼接过后比较ASCII码依次比较
(3)类型转换和调用构造函数
!![] 这里有个强制类型转换 把数组转换为布尔类型false,又进行取非,为true。
!!String(
""
)
// 返回true
!!Boolean(
""
)
// 返回false
!!Number(
""
) // 返回true
!!Boolean([])
// 返回true
!!String([])
// 返回false
!!Number([])
//false
!!String(0)
// 返回true #被转为字符串"0"
!!Number(0)
// 返回false
!!Boolean(0)
// 返回false
[] 转为字符串是
""
// String([]) 返回""
[] 转为数字是 0
// Number([]) 返回0
[] 转为布尔值是
true
// Boolean([]) 返回true
true
转为数字是 1
// Number(true) 返回1
false
转为数字是 0
// Number(false) 返回0
还有一些比如 []==false 两边的值会转化为0,结果为true。
在 JS 中,只有 0,-0,NaN,"",null,undefined 这六个值转布尔值时,结果为 false,任何对象转布尔变量都为真 true。y= Boolean(0)表示类型转换,y为布尔值 x=
new
Boolean(
false
)表示调用构造函数,x为布尔对象,对象的值为真。
If (obj){****}等价于If (obj != null ){****}
(4)null数据类型为object undefined的数据类型是undefined undefined==null 结果为true
(5)三元运算符 z=x<y?x++:++y 判断条件为真 z等于x x运算过后加一 ++y不进行运算 表示在运算之前加一
2、获取页面元素 禁用页面元素
by id获取的是单个DOM节点,by tagname和class是数组
input元素 onblur失去焦点 onfocus获取焦点
禁用
document.getElementById("button1").disabled = true;
document.getElementById("button1").setAttribute(“disabled”,”true”);
3、作用域
匿名函数具有全局作用域
闭包函数能访问上级作用域的变量
4、事件机制
事件捕获->事件处理->事件冒泡
5、异步编程
异步任务会被主线程挂起,不会进入主线程,进入消息队列(任务队列),当执行栈为空时,该消息对应的任务才会进入执行栈获得执行的机会。
回调函数 事件监听 发布/订阅 Promises对象