空值合并运算符 ‘??’
a ?? b 的结果是:
- 如果 a 是已定义的,则结果为 a,
- 如果 a 不是已定义的,则结果为 b。
?? 运算符的优先级相当低,与||,&&同时出现时会报错
空值的 return 或没有 return 的函数返回值为 undefined
不要在 return 与返回值之间添加新行
如果我们想要将返回的表达式写成跨多行的形式,那么应该在 return 的同一行开始写此表达式。或者至少按照如下的方式放上左括号:
函数表达式
函数声明
function sayHi() {
alert( "Hello" );
}
函数表达式
let sayHi = function() {
alert( "Hello" );
};
在执行代码块之前,内部算法会先处理函数声明。所以函数声明在其被声明的代码块内的任何位置都是可见的。
函数表达式在执行流程到达时创建。
箭头函数,基础知识
let func = (arg1, arg2, ...argN) => expression
如果我们只有一个参数,还可以省略掉参数外的圆括号,使代码更短。
如果没有参数,括号将是空的(但括号应该保留)
箭头函数对于简单的单行行为(action)来说非常方便,尤其是当我们懒得打太多字的时候。
但有时我们需要更复杂一点的东西,比如多行的表达式或语句。这也是可以做到的,但是我们应该用花括号括起来。然后使用一个普通的 return 将需要返回的值进行返回
箭头函数没有自己的 “this”
存储在对象属性中的函数被称为“方法”。
方法允许对象进行像 object.doSomething() 这样的“操作”。
方法可以将对象引用为 this。
this 的值是在程序运行时得到的。
一个函数在声明时,可能就使用了 this,但是这个 this 只有在函数被调用时才会有值。
可以在对象之间复制函数。
以“方法”的语法调用函数时:object.method(),调用过程中的 this 值是 object。
请注意箭头函数有些特别:它们没有 this。在箭头函数内部访问到的 this 都是从外部获取的。
parentNode:父节点
childNodes:子节点
firstChild:第一个子节点
lastChild:最后一个子节点
firstElementChild:
lastElementChild:
document.getElementById(id) 方法获取该元素
elem.querySelectorAll(css),它返回 elem 中与给定 CSS 选择器匹配的所有元素。
elem.querySelector(css) 调用会返回给定 CSS 选择器的第一个元素。
elem.closest(css) 方法会查找与 CSS 选择器匹配的最近的祖先
目前为止,最常用的是 querySelector 和 querySelectorAll
elem.hasAttribute(name) — 检查是否存在这个特性。
elem.getAttribute(name) — 获取这个特性值。
elem.setAttribute(name, value) — 设置这个特性值。
elem.removeAttribute(name) — 移除这个特性。
elem.attributes — 所有特性的集合。