JavaScript的细节知识点

71 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

1. 词法作用域的规则

  • 访问变量时,先在自己的作用域中查找,如果没有则沿着作用域链往上找,直到全局.如果全局也没有就报错。

  • 给变量赋值之前,要先找变量.查找变量也是沿着作用域链查找,直到全局,如果全局也没有,则会再全局作用域创建这个变量(隐式全局)

2. 创造对象的方式,构造函数(工厂函数的改进版)

function Person (name, age) {
  this.name = name;
  this.age = age;
  this.sayName = function () {
    console.log(this.name);
  }
}
​
var p1 = new Person('Jack', 18);
p1.sayName() // => Jack
​
var p2 = new Person('Mike', 23);
p2.sayName() // => Mike
​

构造函数存在浪费内存的问题:

3. 解决构造函数浪费内存的方法

利用函数的原型对象

js给每一个函数,提供了一个对应的原型对象.可以通过函数的prototype属性访问到这个原型对象.

原型对象有一个constructor的属性会指向自己对应的函数

而我们通过 new 函数 创建出来的实例对象,默认可以访问到函数对应的原型对象上的属性

function Person (name, age) {
  this.name = name;
  this.age = age;
}
  
Person.prototype.sayName = function (){
   console.log('hello ' + this.name);
}
    
var p1 = new Person('Tom', 18);
var p2 = new Person('Jack', 16);
p1.sayHello(); // hello Tom
p2.sayHello(); // hello Jack
​
​

4. 试用qs.js可以用来更好的处理URL参数

  • qs.parse 这是将一段字符串转换成对象格式。
  • qs.stringify的基本用法与qs.parse相反,是将参数对象格式化为一个字符串。
  • 处理json格式的参数,json格式的参数可以用[ ]方式编码
let json = { a: { b: { c: 'd', e: 'f' } } };
​
qs.stringify(json);
//结果 'a[b][c]=d&a[b][e]=f'
​
qs.stringify(json, {allowDots: true});
//结果 'a.b.c=d&a.b.e=f'
​

这个可以用于axios.post中发送嵌套对象的方法