javascript个人总结
# javascript个人总结
这些内容仅为个人学习经历的总结,送给所有有缘的后来人
学习期间如果发现有些对象的属性找不到,或者找不全,,或者想要了解更多的关于xx对象的资料,我都建议你去MDN文档上去学习
# 变量、常量
js是弱类型语言,变量、常量声明不需要类型,只需要
var a //不严谨的声明
let b //块级作用域的声明
const c //常量的声明
js的基本类型有六种: null
, undefined
, boolean
, number
, string
, symbol
要注意的一点是NaN
是数字但是判断需要使用 Number.isNaN()
如果是一名学过其他语言的同学,建议优先使用let来定义变量
提示
虽然说js弱类型,在赋值时候可以给变量赋任意类型值,但是js运行的v8引擎是强类型,所以如果检测到类型变化,v8会为变量重新分配变量空间,因此开发时建议尽可能的保持变量的类型
# 对象、函数
大多数语言的初学阶段都有一个较难理解的思想就是面向对象,面向对象就是把我们关注部分的数据记录下来的一种结构
在js里对象的声明有以下几种
- 变量赋值
//赋值一个空对象
var a = {}
//赋值一个对象
var b = {
name: '纷羽',
major: '前端',
"background-color": "#fff"
}
- ES5 new
function create(name, major) {
this.name = name;
this.major = major
}
let a = new create("纷羽", "前端")
- ES6 new
class create {
constructor(name, major) {
this.name = name;
this.major = major;
}
}
let a = new create("纷羽", "前端")
在js中函数是一种特殊对象
他可以作为对象的构造器来使用,用new
来调用
# 原型
js在对象的实现上值得一提的是提出了原型链的思想,
摘抄自 https://yuchengkai.cn/docs/frontend/
每个函数都有prototype
属性,除了Function.prototype.bind()
,该属性指向原型。
每个对象都有__proto__
属性,指向了创建该对象的构造函数的原型。其实这个属性指向了[[prototype]]
,但是[[prototype]]
是内部属性,我们并不能访问到,所以使用__proto__
来访问。
对象可以通过__proto__
来寻找不属于该对象的属性,__proto__
将对象连接起来组成了原型链。
通俗一点讲,原型链可以用下面这个图来理解
# 对象继承
在上面对于原型部分的介绍中我们可以看到,对象的继承是通过对原型的继承来实现的
也就是我们可以通过下面的代码来实现继承
- ES5
function Super() {} //父类
//父类追加方法
Super.prototype.getNumber = function() {
return 1
}
//子类
function Sub() {}
//创建子类对象
let s = new Sub()
//子类对象创建父类对象
Sub.prototype = Object.create(Super.prototype, {
constructor: {
value: Sub,
enumerable: false,
writable: true,
configurable: true
}
})
当然在ES6里我们有了更简单的语法支持
- ES6
class Sub extends Super {
}
# 运行环境
由于V8引擎开源之后的一系列尝试,js现在不止能运行于浏览器
现代浏览器 网页上的常规运行方式
node 用于开发、编译、打包网页,也可以用于制作服务端
ReactNative 这是React官方为了使开发者能够跨平台开发android、ios的app而制作的框架,原理也是植入v8引擎,与原生视图层通讯https://facebook.github.io/react-native/
Electron 这是一个用js来开发跨平台图形界面桌面应用(windows、macOS、主流Linux)的框架 http://electronjs.org