JavaScript 基础知识点

JavaScript (JS) 是一种编程语言,为通常用于客户端(client-side)的网页动态脚本,不过,也常通过像Node.js这样的包,用于 服务器端(server-side)。

今天,发一篇关于Js基础知识点的文章,为更多的新人指路。总会有人在你的前方为你探路,前行之路,你不孤单~

JavaScript 基础知识点

先来个目录结构

───1、变量声明
│ └───JavaScript 的数据类型分类和判断
│ └───引用类型和值类型
───2、原型与原型链(继承)
│ └───原型和原型链
───3、作用域和闭包
│ └───作用域
│ └───什么是闭包,如何形成?
───4、如何理解同步和异步
│ └───同步 vs 异步
│ └───异步和单线程
│ └───前端异步的场景描述
───5、简单描述一下对 ES6/ES7 的了解
│ └───解构赋值
│ └───箭头函数
│ └───Promise 对象
│ └───Set 和 Map 数据结构
复制代码
JavaScript 基础知识点

1、变量声明

1-1、JavaScript 的数据类型分类和判断

在 JavaScript 中,共有7种基本类型:

string,
number,
bigint,
boolean,
null,
undefined,
symbol (ECMAScript 2016新增)。
其中string、number、Boolean、undefined、Null、symbol是6种原始类型。

值得注意的是:原始类型中不包含 Object。

类型判断用到哪些方法?

1、typeof

typeof xxx 得到的值有以下几种类型: undefined boolean number string object function symbol。

例如:

console.log(typeof 42);
// expected output: “number”
console.log(typeof ‘blubber’);
// expected output: “string”
console.log(typeof true);
// expected output: “boolean”
console.log(typeof declaredButUndefinedVariable);
// expected output: “undefined”;
复制代码
JavaScript 基础知识点
typeof null 结果是 object ,JavaScript 诞生以来便如此,由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 “object”。
typeof [1, 2] 结果是 object ,结果中没有array 这一项,引用类型除了function其他的全部都是 object
typeof Symbol() 用 typeof 获取 symbol 类型的值得到的是 symbol ,Symbol实例是唯一且不可改变的这是 ES6 新增的知识点.

2、instanceof

用于实例和构造函数的对应。例如判断一个变量是否是数组,使用 typeof 无法判断,但可 以使用 [1, 2] instanceof Array 来判断,返回true。因为, [1, 2] 是数组,它的构造函数就是 Array 。同理:

function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
var auto = new Car(‘Honda’, ‘Accord’, 1998);
console.log(auto instanceof Car);
// expected output: true
console.log([1, 2] instanceof Array);
// expected output: true
复制代码
1-2、引用类型和值类型

除了原始类型,JS 还有引用类型,上面提到的 typeof 识别出来的类型中,只有 object 和 function 是引用类型,其他都是值类型。

根据 JavaScript 中的变量类型传递方式,又分为值类型和引用类型,值类型变量包括 Boolean、String、Number、Undefined、Null,引用类型包括了 Object 类的所有,如 Date、Array、Function 等。在参数传递方式上,值类型是按值传递,引用类型是按共享 传递。

JavaScript 基础知识点
// 值类型
var a = 1;
var b = a;
b = 3
console.log(a) // 1
console.log(b) // 3
// a b 都是值类型,两者分别修改赋值,相互之间没有任何影响。
复制代码
// 引用类型
var a = {x: 10, y: 20}
var b = a
b.x = 100
b.y = 200
console.log(a) // {x: 100, y: 200}
console.log(b) // {x: 100, y: 200}
复制代码
a 和 b 都是引用类型。在执行了 b = a 之后,修改 b 的属性值, a 的也跟着 变化。因为 a 和 b 都是引用类型,指向了同一个内存地址,即两者引用的是同一个值,因 此 b 修改属性时, a 的值随之改动。

2、原型与原型链(继承)

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

注意: 理解对象的原型(可以通过Object.getPrototypeOf(obj)或者已被弃用的__proto__属性获得)与构造函数的prototype属性之间的区别是很重要的。前者是每个实例上都有的属性,后者是构造函数的属性。也就是说,Object.getPrototypeOf(new Foobar())和Foobar.prototype指向着同一个对象。

在javascript中,函数可以有属性。 每个函数都有一个特殊的属性叫作原型(prototype) ,正如下面所展示的。请注意,下面的代码是独立的一段(在网页中没有其他代码的情况下,这段代码是安全的)。为了最好的学习体验,你最好打开一个控制台 (在Chrome和Firefox中,可以按Ctrl+Shift+I 来打开)切换到"Console"选项卡, 复制粘贴下面的JavaScript代码,然后按回车来运行。

function doSomething(){}
console.log( doSomething.prototype );
// 不管您如何声明函数,javascript中的函数总是有一个默认的原型属性
var doSomething = function(){};
console.log( doSomething.prototype );
复制代码
正如上面所看到的, doSomething 函数有一个默认的原型属性,它在控制台上面呈现了出来. 运行这段代码之后,控制台上面应该出现了像这样的一个对象.

{
constructor: ƒ doSomething(),
proto: {
constructor: ƒ Object(),
hasOwnProperty: ƒ hasOwnProperty(),
isPrototypeOf: ƒ isPrototypeOf(),
propertyIsEnumerable: ƒ propertyIsEnumerable(),
toLocaleString: ƒ toLocaleString(),
toString: ƒ toString(),
valueOf: ƒ valueOf()
}
}
复制代码
现在,我们可以添加一些属性到 doSomething 的原型上面,如下所示:

function doSomething(){}
doSometh

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值