本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力
1. JavaScript 的核心特性 简介
JavaScript 是一门 web 编程语言, 它让我们的程序 "心跳" 生动起来.
现在绝对大多数网站都在使用 JavaScript, 在 web 浏览器中运行 JavaScript, 可以说 JavaScript 是实用最广泛的编程语言. 而 Node.js 的出现, 让在浏览器之外也可以使用 JavaScript 进行编程.
我们要理解 JavaScript 的核心特点, 依此来在工作项目开发中灵活运用, 减少 bug, 提高效率, 高效完成任务.
本文就整理了几个核心特性-需要我们理解透彻并灵活运用的核心知识, 快速理解 Javascript, 希望能够帮助到你.
2. 数据类型
JavaScript 6 种基本数据类型: Number, String, Boolean, Undefined, Null, Symbol(ES6 新增)
引用类型: Object, Date, Function, Array(也是特殊的对象)
JavaScript 的数据类型虽然简单, 但还是有些需要特别注意的地方, 比如:
- 基本数据类型 不可以添加/删除属性和方法
- 函数的参数是按值传递的(☆☆)
- 复制的方式不同: 引用类型复制的时候, 复制的是指针, 2个变量实际指的是同一个对象
2.1 Number:
Number 类型的值是数值. 不可修改, 修改数值的值不会起作用.
Number 底层采用双精度浮点数存储, 表示整数和近似实数, 能够表示整数, 也能表示小数. Number 能够安全表示的整数范围是 -9007199254740991 ~ 9007199254740991 即 ±2^53 之间, 如果超出则可能会在末尾的数字上丢失一些精度.
2.1.1 算术运算
这里就提到了 运算符,
还比如 0.1 + 0.2, 也不准确, 在浏览器调试器的结果为: 0.30000000000000004.
2.1.2 特殊数字
另外 Number 类型有 三个特殊数字: Infinity / -Infinity 和 NaN.
Infinity / -Infinity 分别表示正负无穷大
NaN 表示 “不是个数字”, 当产生有意义的结果的数字运算时就会得到这个结果. 比如 1/'a' 就会返回 NaN.
2.2 String
String 字符串, 用于表示文本. 单引号或双引号写的字符串,
☆ 其内部则需要转义不同的引号类型: 外双内单, 外单内双 互斥.
2.3 Boolean
布尔类型用于区分仅有两种可能性的值, 只有 true 和 false 两个可能的值.
2.4 空值:
另外两个特殊的值: null 和 undefined 大多时候可以视为可互换的. 但是 null typeof null 为 "object"
undefined 表示未赋值. 变量或属性定义后未赋值就为 undefined. 这种数据类型用处不多, 一般只是拿来区分有无赋值.
2.5 引用类型的值:
- Object:
Object 类型涵盖的东西非常广, Array, Date, RegExp 这些内置类型的对象也是 "object" 类型.
- Function
函数虽然被当做一种数据类型, 但其本质还是一种特殊的对象, 是从 Object 继承而来的.
3. 函数
函数是 Javascript 编程的基础. 许多特性都是围绕函数展开的, 比如闭包和继承等.
Javascript 里的函数 在使用上极其灵活, 是“一等公民”, 能够作为参数传递(高阶函数)、也可以作为返回值返回.
理解函数的执行首先需要理解作用域的概念, JavaScript 区分全局绑定和局部绑定, 还可以在 其他块和函数内创建块和函数, 进行嵌套.
ES6 引入了块级作用域. ES6 及之后版本 提供了许多方便的 API 供我们使用, 提高编程效率.
4. 面向对象
Javascript 中对象的创建和使用极其方便. 在编程文化中, 面向对象编程的技术使用对象(和相关观念)的核心原则来组织程序.
面向对象编程的核心思想: 将程序划分成为多个更小的部分, 每个部分各司其职, 管理自己的状态.
各部分功能通过接口(interface)/ 有限的函数集/ 或绑定彼此进行交互. (封装体现), 这些功能函数还可能隐藏其具体实现, 而绑定在更抽象的级别提供功能
5. 高阶函数
上面提到 函数的功能的封装, 当我们把一些功能抽象化提取出来, "隐藏"其实现细节(以一个函数名来代替(提取))
对其他函数进行操作(将其他函数作为参数或者通过返回它们来进行操作), 这样的函数都成为 高阶函数.
使用高阶函数, 我们可以对值进行操作, 还可以对操作进行抽象,
- 可以使用高阶函数创建新的函数
- 可以使用高阶函数操作改变其他函数
- 还可以使用高阶函数提供新的控制流类型.
比如数组的内置方法 forEach, 其使用方法
;['最爱你的人', 'xn213', '想你的每一个夜晚'].forEach((item) => {
console.log(item)
// '最爱你的人'
// 'xn213'
// '想你的每一个夜晚'
})
forEach 方法就是将一个功能函数 作为参数传递, 为我们提供了类似于 把 for...of 循环 作为高阶函数的功能.
小结
当然 JavaScript 的核心特性还有很多, 这里小试牛刀, 记录一些学过理解的知识点.