0
点赞
收藏
分享

微信扫一扫

JavaScript简记

木匠0819 2022-03-17 阅读 72

文章目录

历史

在1995 年 Netscape 一位名为 Brendan Eich 的工程师创造了 JavaScript,随后在 1996 年初,JavaScript 首先被应用于 Netscape 2 浏览器上。

又过了几个月,Netscape 将 JavaScript 提交至 Ecma International(一个欧洲标准化组织), ECMAScript 标准第一版便在 1997 年诞生了。

在 1999 年以 ECMAScript 第三版的形式进行了更新,从那之后这个标准没有发生过大的改动。

2009 年 12 月发布的 ECMAScript 第五版,2015 年 6 月发布的第六版,即 ES6 或 ES2015。

语法

类型

  1. Number(数字):遵循 IEEE 754 标准的双精度 64 位格式浮点数
  2. String(字符串):一串UTF-16编码单元的序列,每一个编码单元由一个 16 位二进制数表示
  3. Boolean(布尔):0、空字符串("")、NaN、null 和 undefined 可以被(隐式)转换为 false
  4. Symbol(符号)(ES2015 新增)
  5. Object(对象)
    • Function(函数)
    • Array(数组)
    • Date(日期)
    • RegExp(正则表达式)
  6. null(空)
  7. undefined(未定义):表示一个未初始化的值,实际上是一个不允许修改的常量

变量

在 JavaScript 中声明一个新变量的方法是使用关键字 let 、const 和 var:

  1. let 语句声明一个块级作用域的本地变量;(ES6新特性)
  2. const 允许声明一个不可变的常量;(ES6新特性)
  3. var 是最常见的声明变量的关键字。它没有其他两个关键字的种种限制(整个函数可见)。这是因为它是ES6之前在 JavaScript 声明变量的唯一方法。

运算符

  1. JavaScript的算术操作符包括 +、-、*、/ 和 % ——求余(与模运算相同);
  2. JavaScript 中的比较操作使用 <、>、<= 和 >=;
  3. 相等比较,== 会自动进行类型转换后比较,=== 则不会自动进行类型转换,比较时要求类型和值均一致才行; != 和 !== 同理;

控制结构

JavaScript 的控制结构与其他类 C 语言类似:

  1. 使用 if 和 else 来定义条件语句;
  2. 支持 while 循环和 do-while 循环;
  3. for 循环与 C 中的相同;
  4. 支持 for (let value of array) { … };
  5. 支持 for (let property in object) { … };
  6. && 和 || 运算符使用短路逻辑来进行条件控制;
  7. 支持 三元操作符?: ;
  8. 可以使用基于一个数字或字符串的 switch 语句;

对象

概念

JavaScript 中的对象,Object,可以简单理解成“名称-值”对(而不是键值对:现在,ES 2015 的映射表(Map),比对象更接近键值对),不难联想 JavaScript 中的对象与下面这些概念类似:

  1. Python 中的字典(Dictionary)
  2. Perl 和 Ruby 中的散列/哈希(Hash)
  3. C/C++ 中的散列表(Hash table)
  4. Java 中的散列映射表(HashMap)
  5. PHP 中的关联数组(Associative array)

定义一个对象

var obj = {
name: "Carrot",
_for: "Max",//'for' 是保留字之一,使用'_for'代替
details: {
color: "orange",
size: 12
}
}

赋值和访问

对象属性可以通过如下两种方式进行赋值和访问:

obj.name = 'Simon';
obj['name'] = 'Simon';

key使用变量来定义

从 ECMAScript 2015 开始,对象键可以在创建时使用括号表示法由变量定义:

let phoneType = 'myKey';

var userPhone = {[phoneType]: 12345}
// 等效于
var userPhone = {};
userPhone[phoneType] = 12345

数组

定义和使用数组

var a = ["dog", "cat", "hen"];
a[100] = "fox";
// 数组的长度是比数组最大索引值多一的数
a.length; // 101

遍历方法

  1. for (var i = 0; i < a.length; i++);
  2. for (const currentValue of a);(ES6引入)
  3. for (var i in a);
  4. a.forEach(function(currentValue, index, array) { … });(ES5引入)

数组的方法

数组支持的其他方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

函数

函数入参

函数实际上是访问了函数体中一个名为 arguments 的内部对象,这个对象就如同一个类似于数组的对象一样,包括了所有被传入的参数。

使用剩余参数来替代这个内部对象可以更简洁:

function avg(...args) { .. }

匿名函数

var avg = function() { .. }

内部函数

JavaScript 允许在一个函数内部定义函数。

闭包

每当 JavaScript 执行一个函数时,都会创建一个作用域对象(scope object),用来保存在这个函数中创建的局部变量。

  1. 每次函数被执行的时候,就会创建一个新的,特定的作用域对象;
  2. 与全局对象(如浏览器的 window 对象)不同的是,你不能从 JavaScript 代码中直接访问作用域对象,也没有 可以遍历当前作用域对象中的属性 的方法。

一个闭包,就是 一个函数 与其 被创建时所带有的作用域对象 的组合。

闭包允许你保存状态——所以,它们可以用来代替对象。

ES6 新特性

let const

参见上文

箭头函数

//es5
var fun = function() {
}
//es6
var fn = () => {
}

class类

S6 中支持 class 语法,不过,ES6的class不是新的对象继承模型,它只是原型链的语法糖表现形式。

对象属性加强

  1. 属性定义支持短语法 obj = { x, y }
  2. 属性名支持表达式 obj = {[“baz” + quux() ]: 42}

解构赋值

自动解析数组或对象中的值:

[ b, a ] = getVal() //函数返回值的解构
let { a, b, c } = objABC

剩余参数

参见上文

更多

参见:https://fangyinghang.com/es-6-tutorials/

参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript

举报

相关推荐

0 条评论