JavaScript基础问题整理

JS查找父节点、子节点、同级节点

访问父节点

node.parentNode;

该属性用于返回指定节点的父节点。除document外,所有节点都有父节点,document对象的父节点为null。

document.getElementById("myEle").parentNode;

部分浏览器还支持W3C标准外的parentElement属性,该属性只会返回类型为Element父节点。

访问子节点

node.childNodes;

该属性会返回子节点的Node对象集合(NodeList对象)。

document.body.childNodes;

部分浏览器还支持W3C标准外的childElementCount()属性,该属性会返回类型为Element子节点数量。

访问第一个/最后一个子节点

node.firstChild;
node.lastChild;

这两个属性分别用于访问第一个子节点和最后一个子节点。如果要访问的节点不存在,则返回null。

document.getElementById("myEle").lastChild;

部分浏览器还支持W3C标准外的firstElementChild和lastElementChild属性,这两个属性分别会返回类型为Element的第一个子节点和最后一个子节点。

访问之前/之后的同级节点:

node.previousSibling;
node.nextSibling;

这两个属性分别用于访问之前或之后的同级节点(兄弟节点)。具有相同父节点的节点为兄弟节点,之前或之后表示它们在文档中出现的顺序。

document.getElementById("myEle").previousSibling;
document.getElementById("myEle").nextSibling;

部分浏览器还支持W3C标准外的previousElementSibling和nextElementSibling属性,这两个属性分别会返回类型为Element的兄弟节点。

返回元素的根元素

node.ownerDocument;

ownerDocument属性分别用于返回元素的根节点,即:文档对象(Document)。通过这个属性,我们能够直接访问根元素而不必层层遍历。

document.getElementById("myEle").ownerDocument;

Javascript中使用typeof能得到的类型

typeof undefined  // "undefined"
typeof 'abc' // "string"
typeof 123 // "number"
typeof true // "boolean"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
typeof console.log //"function"
typeof Symbol //"function"

JS中何时使用 === 何时使用 ==

if (obj.a == null) {
    // 相当于 obj.a === null || obj.a === undefined,简写形式
    // jquery推荐写法
}

其他地方 ===

JS中有哪些内置对象 —— 数据类型对象

Object
Array
Boolean
Number
String
Function
Date
RegExp
Error

JS变量按照存储方式区分有哪些类型,并描述其特点。

// 值类型

var a = 10
var b = a
a = 11
console.log(b) //10

// 引用类型

var obj1 = {x:100}
var obj2 = obj1
obj1.x = 200
console.log(obj2.x) // 200

如何理解JSON

JSON是一个JS对象而已

JSON.stringfy({a:10,b:20})
JSON.parse('{"a":10,"b":20}')

原型,几种原型模式,弊利

局部作用域,变量生命提前

箭头函数和普通函数有什么不同

类数组和数组的区别

Map,Set,Weekmap, WeekSet

JS闭包

知识点

构造函数

// 构造函数首字母大写
functtion Foo (name, age) {
    this.name = name
    this.age = age
    this.class = 'class-1'
    // return this // 默认有这一行
}

var f = new Foo('zhangsan',20)
var f1 = new Foo('lisi',21)

构造函数-扩展

  • var a = {}其实是var a = new Object()的语法糖
  • var a = []其实是var a = new Array()的语法糖
  • function Foo(){...}其实是var Foo = new Function(...)
  • 使用instanceof判断一个函数是否为一个变量的构造函数

原型规则和示例

原型链

instanceof

  • 如何准确判断一个变量是数组类型

  • 写一个原型链继承的例子

  • 描述new一个对象的过程