JavaScript威望指南笔记(上)-言语中心

词法组织

字符集

运用Unicode编写

  • ES3 Unicode2.1+
  • ES5 Unicode3+

辨别大小写

解释

// 解释

/*
解释
*/

标识符和保留字

必需以字母、下划线、美圆符最先,后续字符可所以字母、数字、下划线、美圆符,即数字不能作为首字符

保留字

《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》

可选的分号

Javascript只要在缺少了分号就没法准确剖析代码的时刻才会弥补分号。

平常,一条语句以(、[、/、+、-最先,它极有能够和前一条语句一同剖析。return、break、continue除外

范例、值和变量

数据范例:在编程语言中、能够示意并操纵的值的范例

变量:一个值的标记称号,能够经由过程该称号取得值的援用。

数据范例

平常分类

  • 原始范例:数字、字符串、布尔值、null、undefined
  • 对象(属性的键值对鸠合)范例:数组、一般对象、函数类、日期类、正则类、毛病类

其他分类

  • 能够具有要领的范例和不能具有要领的范例
  • 可变范例(数字、布尔值、null、undifined、字符串)和不可变范例(对象、数组)

数字

javascript采纳IEEE 754规范定义的64位浮点花样示意数字,最大值±1.7976931348623157E+308,最小值±5E-324

能够示意的整数局限为-2E+53~2E+53。实际操纵(如数组索引)是基于32位整数。

注重: 小数精度题目,如0.1+0.2 != 0.3 ,须要转成整数盘算,盘算完成再转回小数。发生原因是Number采纳的时IEEE 754 64位双精度浮点数编码,浮点数没法准确示意其值局限内的一切数值,致使十进制转换成二进制时有舍入形式,发生了偏差

花样

  • 整形直接量
  • 浮点直接量

算术运算

上溢出(正负无穷)运用±Infinity示意,下溢出(无穷接近于0)则返回0(±0)。

NaN和任何值都不相称,包括本身。

二进制浮点数和四舍五入毛病

在javascript运用实数时,经常只是实在值的一个近似示意。

let x=0.3-0.2
let y=0.2-0.1
x==y // false
x==0.1 // false
y==0.1 // true
// 因为舍入偏差,0.3和0.2之间的近似差值实际上不等于0.2和0.1之间的近似差值

文本

字符串是一组由16位值构成的不可变的有序序列。字符串长度是其所含的16位值的个数。

转义字符

《JavaScript威望指南笔记(上)-言语中心》

布尔值

true或许false
可转换为false的值:undefined、null、0、-0、NaN、”。

null和undifined

  • typeof null为object,寄义为非对象
  • undifined 未定义值

全局对象

全局属性、全局函数、组织函数、全局对象

包装对象

存取字符串、数字或布尔值的属性时建立的暂时对象叫包装对象。
《JavaScript威望指南笔记(上)-言语中心》

不可变的原始值和可变的对象援用

可变范例(数字、布尔值、null、undifined、字符串)和不可变范例(对象/援用范例、数组)。

范例转换

《JavaScript威望指南笔记(上)-言语中心》

转换和相称性

《JavaScript威望指南笔记(上)-言语中心》

显式范例转换

《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》

变量声明

假如给一个未声明的变量赋值(不可设置),实际上会给全局对象建立一个同名属性(可设置),不发起如许用。

建立一个全局变量实际上是给全局对象建立了一个属性。

变量作用域

一个变量的作用域是顺序源代码中定义这个变量的地区。

  • 函数作用域、块级作用域。
  • 声明提早

范例检测

  • typeof 用于基本范例和函数推断
  • instanceof用于对象范例推断
  • Object.prototype.toString.apply([])==='[object Array]' null、undifined失效

表达式和运算符

表达式

表达式分为简朴表达式(常量、变量名)和庞杂表达式(由简朴表达式构成)。

原始表达:

表达式的最小单元,

  • 直接量(包括:数字、字符串、布尔,不包括数组、对象)
  • 关键字
  • 变量

由简朴表达式能够组合成复合表达式

庞杂表达式

  • 对象和数组的初始化表达式
  • 函数定义表达式
  • 属性接见表达式
  • 挪用表达式
  • 对象建立表达式

运算符

申明:

  • 下图根据优先级高到低排序,水平线支解的具有差别的优先级
  • A列示意运算符结核性,L(左到右) R(右至左)
  • N列示意操纵数的个数
  • 范例列示意希冀的操纵数范例以及运算符的效果范例

《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》

分类

根据操纵数个数分:一元(+1)、二元(1+2)、三元(?:)

左值

表达式只能出现在赋值运算符的左边。变量、对象属性、数组元素均是左值。

算术表达式

一元算术运算符

作用于一个零丁的操纵数,并发生一个新值,具有很高的优先级,且均为右连系。

  • +:转换为数字或许NaN,并返回转换后的值
  • -:和+一样,然则会转变效果的标记。
  • ++--:运算符在操纵数前,操纵数±1并返回盘算后的值;运算符在操纵数以后,操纵数±1,并返回盘算前的值。
  • ,逗号运算符,从左到右一次实行,返回最右侧的值

关联表达式

  • in
  • instanceof

逻辑表达式

赋值表达式

其他运算符

  • ?:
  • typeof
  • delete
  • viod
  • ,逗号运算符,从左到右盘算,末了返回最右侧的值

语句

声明语句

  • 变量var let
  • 函数function

前提语句

switch

switch(expression){
    statements
}
// expression中盘算是运用===

轮回

do/while

do{
   statements 
} while(expression)
// 最少实行一次

for/in

// 将对象中的一切属性复制到一个数组中
var o = {x:1,y:2,z:3};
var a = [], i = 0;
for(a[i++] in o) /* empty */;

跳转

标签语句

mainloop: while(token I= null) { 
// 疏忽这里的代码...
continue mainloop; //跳转到下一次轮回
// 疏忽这里的代码...
}
//从标署名最先,以便在报错时退出顺序
compute_sum: if (matrix) { 
    for(var x = o; x < matrix.length; x++) { 
        var row= matrix[x]; 
        if (!row) break compute_sum; 
        for(var y = o; y < row.length; y++) { 
            var cell= row[y]; 
            if (isNaN(cell)) break compute_sum; sum+= cell; 
        }
    }
    success= true; 
}
// break语句跳转至此II假如在success== false的前提下抵达这里, 申明我们给出的矩阵中有毛病//否则将矩阵中一切的元素举行乞降

其他语句范例

width

// 暂时扩大作用域链
with(document.form[0]){
    name.value=""
}

try/catch

try{
    xxxx
}catch(e){
    xxx
}finally{
    xxx
}

对象

建立对象

  • 对象直接量建立的对象原型为Object.prototype
  • 经由过程new建立的对象原型为运用的原组织函数的prototype
  • Object.create()建立的对象原型为第一个参数,也可设置为null

属性的查询和设置

属性接见毛病

查询属性和原型有关,设置与原型无关(假如设置属性为继续属性,且具有setter要领时,将实行setter,而不是给当前对象建立新的属性)

以下状况给对象O设置属性P会失利

  • O中属性P是只读的(defineProperty()要领中有破例)
  • O中的P是继续的,且是只读的
  • O中不存在属性P,O中没有运用setter要领继续属性P,而且O的可扩大性()是false

检测属性

  • in:x in o
  • hasOwnProperty: O.hasOwnProperty(x)
  • propertyIsEnumerable: o.propertyIsEnumerable(x),hasOwnProperty的增强版,本身属性且可罗列
  • o.x!==undefined x的值为undefined则须要运用in

属性的特征

  • 值 value
  • 可写性 writable
  • 可罗列性 enumerable
  • 可设置性 configurable
猎取本身属性的特征
Object.getOwnPropertyDescriptor({x:1},'x')
// 返回{value:1,writable:true,enumerable:true,configurable:true}
设置属性的特征
// 单个
Object.definePeoperty(o,'x',{
    value:1, // 值
    writable:true, // 可读
    enumerable:true, // 可遍历
    configurable:true // 可转变设置
})
// 批量
Object.definePeoperties(o,{
    x:{
        value:1,
        writable:true,
        enumerable:true,
        configurable:true
    },
    y:{
        value:1,
        writable:true,
        enumerable:true,
        configurable:true
    }
})

对象的三个属性

原型

  • 查询原型Object.getPrototypeOf()
  • 检测是不是包括某个原型p.isPrototypeOf(o),p是不是是o的原型

类属性

能够经由过程toString猎取对象的类属性

function classof(o){
    if(o===null) return 'Null';
    if(o===undefined) return 'Undefined';
    return Object.prototype.toString.call(o).slice(8,-1);
}
classof({}) // => 'Object'

可扩大性

  • 查询可扩大性 Object.isExtensible(o)
  • 转换成不可扩大 Object.preventExtensions(o)
  • 关闭:转换为不可扩大且一切属性不可设置 Object.seal(),可运用Object.isSealed()来检测是不是关闭
  • 凝结:转换为不可扩大且一切属性不可设置、一切属性只读 Object.freeze(),能够运用Object.isFrozen()来检测是不是凝结

序列化

JSON.stringify(),JSON.parse()具可接受第二个参数,标识须要序列化或复原的属性列表

对象要领

  • toJSON()
  • valueOf()将对象转换成原始值

数组

建立数组

  • 数组直接量[],该语法有可选的末端逗号,故[,,]只要两个元素而非三个
  • new Array()
new Array() // 建立一个空数组
new Array(10) // 建立一个长度为10的数组
new Array(5,4,3) // 建立一个已包括数组元素数组

希罕数组

希罕数组并非项的值为undefined,而是不存在

// 三种体式格局建立
// 1
new Array(5)
// 2
a=[]
a[1000]=0
// 3
delete 

数组要领

*标识为变异要领

  • join
  • reverse *
  • sort *
  • concat
  • slice
  • splice *,返回删除元素构成的数组
  • push/unshift *,返回数组新的长度
  • pop/shift * 返回删除元素的值
  • toString/toLocalString 有方括号,逗号分开
  • forEach
  • map
  • filter,能够运用来紧缩希罕数组
  • every 一切元素挪用剖断函数,均返回true才返回true
  • some 一切元素挪用剖断函数,有一个返回true就返回true
  • reduce/reduceRight
// 乞降、第二个参数为temp的初始值,不传默许运用数组中的第一个元素
arr.reduce((temp,value,index,arr)=>temp+value, 0)
  • indexOf/lastIndexOf

数组范例

推断运用Array.isArray(arr)推断是不是是数组

函数

组织函数:用于初始化一个新建立的对象的函数

函数定义

两种定义体式格局及区分:

  • 函数声明语句,能够在定义前运用(函数声明前置);不能出现在轮回、前提、try/catch/finally、with中
  • 函数定义表达式,不能在定义前运用(变量声明前置);能够出现在任何地方
  • 函数组织器

《JavaScript威望指南笔记(上)-言语中心》

函数挪用

四种挪用体式格局:

  • 作为函数:this在非严厉形式为全局对象,严厉形式为undefined
  • 作为要领:this为要领所属对象
  • 作为组织函数:this为新组织的对象
  • call()或许apply()间接挪用:this为指定的对象

函数的实介入形参

不定实参函数:能够吸收恣意个数的实参,经由过程arguments(类数组对象)吸收参数

作为定名空间的函数

马上挪用函数

(function(){
    
}())

闭包

《JavaScript威望指南笔记(上)-言语中心》
《JavaScript威望指南笔记(上)-言语中心》
词法作用域,函数内变量作用域是在函数定义时建立的,而不是在挪用时建立,且在函数实行时,定义时的作用域链依旧有用。
函数对象能够经由过程作用域链互相关联起来,函数体内部的变量都能够保留咋子函数作用域内,这类特征叫闭包。

函数属性、要领和组织函数

length 形参个数

arguments 参数对象(类数组对象)

prototype 指向原型对象

apply、bind、call

  • apply 将函数作为指定对象thisObj的要领来挪用,通报给它的是指定的参数数组args
function.apply(thisObj,args)
  • call 将函数作为指定对象thisObj的要领来挪用,通报给它的是指定的参数,假如thisObj为null,则为全局对象
function.call(thisObj,arg1,arg2,...)
  • bing 返回一个新函数,经由过程可选的指定参数,作为指定对象obj的要领挪用该要领,通报给该函数的参数由两部分构成,一部分是通报给bind()的args数组指定的参数,剩下的是传给这个新函数的一切值。

传入bind()的实参都是放在传入原始函数的实参列表最先的位置。

function.call(obj,arg1,arg2,...)
// 示例:
let g=f.bind(obj,1,2)
g(3)
// 等价于
f.call(obj,1,2,3)

toString

Function()组织函数,末了一个实参为函数体

函数式编程

高阶函数

操纵函数的函数,吸收一个或许多个函数作为参数,并返回一个函数。
《JavaScript威望指南笔记(上)-言语中心》

不完全函数

传入bind()的实参都是放在传入原始函数的实参列表最先的位置。

作用域

分类

  • 全局
  • 函数,块级(ES6+)
  • eval

作用域链

变量对象

用于存储实行高低文中的:

  • 变量
  • 函数声明
  • 函数参数
1.变量初始化阶段

《JavaScript威望指南笔记(上)-言语中心》

2.代码实行阶段

类和模块

特征:封装、继续、多态、笼统

类名运用大驼峰定名。ES6直接运用class,下面是ES6之前的。
《JavaScript威望指南笔记(上)-言语中心》

组织函数和类的标识

原型对象是类的唯一标识:当切仅当两个对象继续自同一个原型对象时,它们才属于同一个类的实例。

construsctor

组织函数是类的大众标识,construsctor属性为对象供应了类。

let 0= new F()
0.construsctor===F // => true

《JavaScript威望指南笔记(上)-言语中心》

javascript中的java式的类继续

《JavaScript威望指南笔记(上)-言语中心》
建立一个类分为三步:

  • 定义一个组织函数,并设置初始化新对象的实例属性
  • 给组织函数的prototype对象定义实例要领
  • 给组织函数定义类字段和类属性

类的扩大

javascript中基于原型的继续机制是动态的,假如建立对象以后原型的属性发生变化,也会影响到继续这个原型的一切实例,即我们能够经由过程给原型对象增加要领来扩大Javascript类。

类和范例

instanceof:
obj instanceof c 
obj.isPrototypeOf(f)
constructor:
x.constructor===Number
组织函数的称号
Object.prototype.toString.call(o)

注重:

  • 前两种要领在多个实行高低文无效
  • 这三种要领都有一个题目,就是不是一切对象都有constructor属性
鸭式辩型

Javascript中的面向对象手艺

规范转换要领

  • toString()
  • toLocaleString()
  • valueOf()
  • toJSON()

要领借用

Object.prototype.xxx=xxx

子类

  • 要领链
  • 组织函数链

正则表达式的婚配形式

定义

  • 直接量
  • 组织器

内容

直接量字符

《JavaScript威望指南笔记(上)-言语中心》

字符类

《JavaScript威望指南笔记(上)-言语中心》

反复

非贪欲反复在婚配字符后加一个?即可。
《JavaScript威望指南笔记(上)-言语中心》

挑选、分组、援用

《JavaScript威望指南笔记(上)-言语中心》

指定婚配位置

《JavaScript威望指南笔记(上)-言语中心》

修饰符

《JavaScript威望指南笔记(上)-言语中心》

String要领

  • search
  • replace
  • match
  • split

RegExp对象

属性:
  • source
  • global
  • ignoreCase
  • multiline
  • lastIndex
要领:
  • exec
  • test

javascript的子集和扩大

迭代

迭代器

Iterator(),返回迭代器

for(let [k,v] in Iterator({a:1,b:2}))
console.log(k+"="+v)   // a=1,b=2

特征:

  • 只针对自有属性举行遍历,疏忽继续属性
  • 第二个参数传true,则只遍历属性名。疏忽值

数组推导*

[expression for (varuable in object) if(conditon)]

函数简写

表达式闭包:假如函数只盘算一个表达式并返回它的值,关键字return和花括号能够省略

let succ=function(x)x+1

多catch从句

E4X

jsx语法

    原文作者:BWrong
    原文地址: https://segmentfault.com/a/1190000017840872
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞