● Object 类型
● Array类型
● Date类型
● RegExp类型
● Function类型
● 基本包装类型
● 单体内置对象

Object类型

创建对象: 使用`new Object`或者直接使用**字面量**`var obj={}` 字面量定义对象**不会**调用Object构造函数 访问对象属性: 使用点 `.` 或者方括号内字符串 `obj["key"]` 使用 *value* `instenceof` ***Object*** 可以引来判断对象

var s="hello";
var arr=[1,2,3,4,5];
console.log(s instanceof Array);    //false 对于基本类型,instanceof 总是返回 false
console.log(ob instanceof Array);   //true

Array类型

使用Array构造函数时可以省略 `new` 操作符. 修改`length`属性可以直接改变数组的长度. 如果数组的索引超过了当前数组, 也会直接改变数组的长度. *可以使用`arr[arr.length]`在数组末尾添加新项

var arr = [1,2,3,4,5];  //字面量创建
var arr = Array(5) //创建数组长度为5的空数组
var arr = Array(1,2,3,4,5) //使用构造函数创建
Array方法 说明
Array.isArray(arr) 判断某个值是不是数组 返回 true/false
arr.toString() 返回数组中每个值的字符串形式
arr.toLocaleString() 根据所在区域的字符串形式返回字符串
arr.valueOf() 返回当前数组
arr.join(separator) separator参数可选, 按指定的连接方式返回字符串,元素的连接符号为传入的参数, 默认为逗号。
nullundefined 用空格表示, 不会改变原有的数组。
arr.push(value)栈方法 压 接收任意数量的参数, 把他们逐个添加到数组末尾, 返回修改后的数组长度
arr.pop()栈方法 弹出 从数组末尾移除一项, length 的值-1,返回移除的项
arr.unshift(value)队列方法 接收任意数量的参数, 把他们逐个添加到数组前端, 返回修改后的数组长度
arr.shift()队列方法 从数组前端移除一项, length 的值-1,返回移除的项
arr.reverse()反转数组 反转当前数组元素的顺序,会直接改变当前的数组顺序
arr.sort(fucntion)重排序 接收一个函数,该函数接收2个参数,根据该函数的返回值重新排序数组,会改变当前的数组顺序
如果返回正数,则第一个参数在第二个参数之前;如果返回0,则位置相等;
如果返回负数,则第一个参数在第二个参数之后。
*可以使用return value2-value1 比较数字大小
arr.concat(value)连接数组 将接收的参数放到数组末尾,返回一个新的数组, 不会改变原有的数组。
arr.slice(star,end)截取数组 只有一个参数的情况下, 会截取从该参数指定的位置开始到数组结束
有两个参数的情况下,会截取从star指定的位置开始到end指定的位置的前一个元素, 不包括end。
*如果值为负数, 则实际的值为 length 加上该负值。不会改变原有的数组。
arr.splice(index,num,add1*…)
删除/插入数组
第1个参数为要操作(删除/插入)的起始位置, 第2个参数为要删除的个数,
从第3开始的参数为要插入的元素,使用前插法,即插入的项目会在操作位置之前
*会改变原有的数组, 返回值为被删除的元素。
arr.indexOf(item,index)查找数组 参数分别为: 要查找的元素, 从哪里开始查找(下标)。从数组开头往后方向查找。
返回该元素第一次出现的位置(下标), 如果未找到,则返回-1。*使用===全等操作。
arr.lastIndexOf(item,index) 同indexOf,不过是从数组末尾往前方向查找。
迭代方法 都接收2个参数,对每一项运行的 函数this 的值(可选)
arr.every(fun,this) 如果函数对每一项都返回true,则 every() 返回 true,否则返回false
arr.some(fun,this) 如果函数对任一项返回true,则 some() 返回 true,否则返回false
arr.filter(fun,this) 对每一项运行函数,filter()会返回函数运行结果为true的元素组成的数组
arr.map(fun,this) 对每一项运行函数,map()会返回每次函数调用结果组成的数组
arr.forEach(fun,this) 单纯对每一项运行函数,forEach() 没有返回值
归并方法 迭代数组所有项, 然后构建一个最终返回值
arr.reduce(fun,initvalue) 接收2个参数,分别为每一项上调用的函数, 归并的初始值**(可选)
传入的函数接收
4**个参数分别为: 前一个值, 当前值, 当前项的索引, 数组对象本身
从第一项遍历到最后一项, 函数返回的任何值都会传递给下一项。
arr.reduceRight(fun,initvalue) 同reduce,不过遍历方向是从最后一项到第一项。

Date类型

创建一个日期对象:

var date = new Date()   //创建当前日期的Date对象

如果要创建指定日期和事件的Date对象, 则必须传入毫秒数(Number类型), 该毫秒数为1970年1月1日 0:00:00起至该日期经过的毫秒数。

var date = new Date(Date.parse("2018/8/8 12:00:00")); // 2018年8月8日 12:00:00
var date2= new Date(Date.UTC(2018,7,8,12,00,00));      // 2018年8月8日 12:00:00
var date2= new Date(1533700800000)                     // 2018年8月8日 12:00:00
创建特定日期时间的Date方法 返回1970年1月1日 0:00:00起至该日期经过的毫秒数(Number)
Date.parse(string) 接收一个用字符串表示的日期, 返回毫秒数
如果字符串不能表示日期, 则返回 NaN
Date.UTC(年,月-1,天,时,分,秒,毫秒) 传入参数表示日期, 月份是从0开始算的(一月是0,十二月是11)
前2个参数是必须的, 后面的参数如果省略, 则设为0。返回毫秒数
Date.now() 返回调用这个方法时的日期时间的毫秒数
*如果浏览器不支持, 也可以使用+new Date把当前日期的Data对象转为Number类型
Date继承的方法 说明
date.toString() 返回字符串形式的日期
Wed Aug 08 2018 12:00:00 GMT+0800 (中国标准时间)
date.toLocaleString() 根据所在区域的返回字符串形式的日期
2018/8/8 下午12:00:00
date.valueOf() 返回当前日期的毫秒数形式
1533700800000

RegExp类型

创建正则表达式:var exp=/express/flags;每个正则表达式都可带有标志(flags):
g 表示全局模式, 会应用于所有字符串, 每次调用后, index不会归0。
i 表示不区分大小写。
m 表示多行模式, 在到达文本末尾时还会继续查找下一行。
javascript 正则表达式不支持后发断言。
RegExp对象的 toString()toLocaleString() 方法都会返回正则表达式的字面量形式, 与创建方式无关。

var exp = /\.at/gim                 //匹配.at
var exp2= new RegExp("\\.at","gi") //使用RegExp构造函数要对元字符进行双重转义
exp.toString();     //返回 /\.at/gim
exp2.toString();    //返回 /\.at/gim
RegExp实例属性 作用于单个正则表达式实例
global 布尔值,表示是否设置了g标志
ignoreCase 布尔值,表示是否设置了i标志
multiline 布尔值,表示是否设置了m标志
lastIndex 整数,表示开始搜索下一个匹配项的字符位置 (匹配项的下一个元素)
source 正则表达式的字符串表示
RegExp实例方法 作用于单个正则表达式实例
exp.exec(string) 接收一个字符串参数, 返回包含第一个匹配项的数组
exp.test(string) 接收一个字符串参数, 如果有匹配项, 返回true, 否则返回false
RegExp构造函数的属性 适用于作用域中的所有正则表达式
RegExp.inputRegExp[$_] 最近一次要匹配的字符串
RegExp.lastMatchRegExp["$&"] 最近一次的匹配项
RegExp.lastparenRegExp["$+"] 最近一次匹配的捕获组(一对括号就是一个捕获组)
RegExp.leftContextRegExp["$`"]|inpu字符串中lastparen之前的位置
RegExp.rightContextRegExp["$'"] inpu字符串中lastparen之后边的位置
RegExp.multilineRegExp["$*"] 布尔值,是否所有的表达式都使用多行模式

*非有效的ECMAScript标识符要用方括号语法访问


Function类型

  • 函数名实际上是一个指向函数对象的指针
  • 使用不带括号的函数名是访问函数指针, 而非调用函数。
  • 重复定义函数, 后面的函数会覆盖前面的函数。
  • 函数声明会得到变量提升, 未执行之前可以使用。函数表达式则不会, 必须执行到它所在的代码, 才能使用。
  • 函数可以作为参数传递给另一个函数, 也可以将函数作为另一个函数的结果返回。
callee属性

`callee`属性是一个指针,指向拥有argument对象的函数(当前函数),常用于递归函数, 分离函数的执行与函数名。 **不能用于严格模式!**

function fun(x,y){argument.callee()  //指向fun函数(函数本身)
}
caller属性

`caller`属性保存调用当前函数的函数的引用 (谁调用了它) , 在全局作用域中调用, 会返回 `null` 。 **不能用于严格模式!** ```js function fun(){ return fun.caller; } function otherfunction(){ console.log(fun()); } console.log(fun()); //null otherfunction(); //otherfunction ```

this属性

`this`指向函数执行的环境对象( 函数本身所在的作用域 )。 在**全局**作用域中调用, `this`指向`window`。**严格模式**下, 全局环境中的`this`指向`undefined`。

window.color="red";
var o={color."blue"};function sayColor(){alert(this.color);   //this指向函数本身所在的作用域
}sayColor();        //此时函数本身的作用域是window, 所以返回"red"
o.sayColor=sayColor;
o.sayColor();   //o.sayColor()的作用域是o对象, 所以返回"blue"
length属性和prototype属性

`length`属性表示函数希望接收的**命名参数**的个数。 `prototype`属性保存着所有实例的方法, 无法枚举。

apply方法

apply方法接收2个参数, 一个是运行函数的作用域 (让this指向哪里) , 另一个是参数数组。 apply需要把参数打包成**数组**传入。

call方法

同apply, 不同的地方是call的参数是**逐个**传给函数。这2个方法都可用来扩大作用域。

bind方法

bind方法会创建一个函数实例, 然后其`this`的值会被绑定传给bind()函数的值。

var o={color."blue"};
function sayColor(){alert(this.color);
}
var objectSayColor=sayColor.bind(o);   //将对象o作为objectSayColor函数的this

基本包装类型

基本包装类型有:`Boolean`、`Number`、`String`。 每当读取一个基本类型的值时, 后台就会创建一个对应的基本包装类型。 自动创建的基本包装类型只存在于代码执行瞬间, 然后立即被摧毁, 所以不能在运行时添加属性和方法。

Boolean类型
var bo1 = new Boolean(false);   //创建一个Boolean类型的基本包装对象, 初始值为false
var bo2 = new Boolean(2);      //2会被自动转为true
var bo3 = true;                    //字面量创建的Boolean基本类型
alert(bo1 && true)              //返回true, 因为布尔表达式中 对象 会被转为true, 不论其初始值
//尽量不要使用Boolean构造函数, 容易造成误解。
typeof bo1;     //object (对象)
typeof bo3;     //boolean (基本类型)
typeof bo2.valueOf()    //boolean

Boolean对象的 valueOf() 方法会返回基本类型true 或者 false

Number类型

```js var value = 25; var number = Number(value); //转换为数字的函数 Number() alert(typeof number); //number (基本类型)

var obj = new Number(value); //使用构造函数 new Number()
alert(typeof obj); //object (基本包装类型的对象)

![Number类型的基本包装对象](https://img-blog.csdn.net/20180823131903682?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMTM1Nzg0MDcw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
|Number基本包装对象实例的方法 | 作用于 |
|:-------------|:-------------|
|*num*.valueOf()|返回Number对象的**基本类型Number**的数值|
|*num*.toString(*radix*)|返回数值的**字符串**形式, 可以接收一个参数, 指定返回几进制的字符串形式。|
|*num*.toLocaleString()|根据浏览器设置的区域, 返回对应的**字符串**形式,没有参数。<br>中国地区会把数字每三位用逗号隔开。如:1,256,345|
|*num*.toFixed(*number*)|接收一个数值, 按指定数值保留小数点后的位数, 返回**字符串**的形式 (标准为0~20位)|
|*num*.toExponential(*number*)|同toFixed(),不过是**返回**以指数表示法(e表示法)表示的字符串形式。如 1.26e+6|
|*num*.toPrecision(numnber)|接收一个数值参数, 表示返回的数值的**所有数字位数**(不包括指数部分)。 <br>位数不够的话, 返回结果**可能会向上或向下舍入**<br>返回的形式可能是fixed的形式或者e表示法, 超出指定位数时将其转换为e表示法。|
<h5>String类型</h5>
string对象的`length`属性表示字符串的长度。
string对象的`valueOf()`, `toString()`,`toLocaleString()` 都返回String对象的**基本类型**值。
|字符方法|操作单个字符|
|:-|:-|
|*str*.charAt(*index*)|返回指定位置的字符, 跟方括号加索引一样。<br>`str.charAt(1)`等同于`srt[1]`|
|*str*.charCodeAt(*index*)|返回指定字符的**编码**。如:字母'e'会返回101(*Number类型*)||字符串方法|操作整个字符串(不会改变原有的字符串)|
|:-|:-|
|*str*.concat(*string1+,string2,...*)<font color="B6B6B6">连接字符串</font>|接收**一或多**个字符串, 并依次把他们放到与原字符串连接起来, **返回**连接后的字符串|
|*str*.slice(*star,end?*)<font color="B6B6B6">按位置截取字符串</font>|返回截取后的字符串,参数为开始的位置,结束位置的下一个位置(不会包含end的位置)<br>对于**所有的负值参数, 会与length相加**。如果省略第二个参数, 则截取到末尾。|
|*str*.substring(*star,end?*)<font color="B6B6B6">按位置截取字符串</font>|同slice(), 不同的是,substring()会把**所有的负值参数转换为0** |
|*str*.substr(*star,howmany?*)<font color="B6B6B6">按**个数**截取字符串</font>|返回按个数截取后的字符串,参数为:开的位置,截取的个数。<br>如果第一个参数为**负值,则与length相加**,如果第二个参数为**负值, 则转换为0**。<br>如果省略第二个参数, 则截取到末尾。|
|*str*.indexOf(*item,index?*)和<br>*str*.lastIndexOf(*item,index?*)<font color="B6B6B6">位置查找</font>|跟Array的indexOf()和lastIndexOf()一样|
|*str*.trim()<font color="B6B6B6">|将字符串两边的空白去掉,并返回去掉空白后的字符串。|
|*str*.toUpperCase()|把字符串全部变为大写并返回, 可以对单个字符操作。|
|*str*.toLowerCase()|把字符串全部变为小写并返回, 可以对单个字符操作。|
|*str*.match(*reg*)<font color="B6B6B6">正则匹配</font>|接收一个参数, 可以是正则表达式或者RegExp对象, **返回匹配项数组**。跟*reg*.exec()一样|
|*str*.search(*reg*)|与match()一样, 不同的是返回的是第一个匹配项的**索引**, 未找到则返回-1。|
|*str*.replace(*reg\|str*,*str\|fun*)<font color="B6B6B6">替换字符串</font><sup>[[1]](#replace)</sup>|接收2个参数, 第1个参数可以是正则表达式(RegExp)或者字符串, <br>第2个参数可以是字符串或者函数。然后进行替换操作,返回替换后的新字符串。|
|*str*.split(*string\|reg,number*)<font color="B6B6B6">分割字符串</font><sup>|按指定方式将字符串分割成多个字符串,返回分割后字符串组成的数组。<br>第1个参数可以是字符串或者正则表达式, 不会包含在结果里。<br>第2个参数指定返回的数组的长度。|
|*str*.localeCompare(*string*)|与参数所给的字符串比较, 如果该字符串在参数所给的字符串在之前,则返回负值,<br>如果该字符串在参数所给的字符串在之后,则返回正值,位置相等返回0|
|**String**.fromCharCode(*charcode+*)|接收一或多个字符编码, 然后把他们转为一个字符串|<h5 id="replace">replace()方法</h5>
接收2个参数, 第1个参数可以是正则表达式(或RegExp对象)或者字符串, 第2个参数可以是字符串或者函数。
如果第一个参数是字符串, 那么**只会替换第一个**匹配项, 如果要替换所有的匹配项, 则要用正则表达式, 并且要指定`g`标志。

var text = “cat, bat, sat, fat”;
//第一个参数为字符串, 所以只会替换第一个匹配项
var result = text.replace(“at”,“ond”); //“cond,bat,sat,fat”
//第一个参数是正则表达式, 并且指定g标志, 所以会替换所有的匹配项
result=text.replace(/at/g,“ond”) //“cond,bond,sond,fond”

如果第二个参数是**函数**:会向该函数传递参数分别为:
**模式匹配项**(匹配到的字符), *(捕获组1)*,*(捕获组2)*...,**模式匹配项在字符中的位置**(索引),**原始字符串**
如果没有捕获组, 则为3个参数。模式匹配项在字符中的位置(索引)和原始字符串始终在参数的**最后**
该函数必须返回一个**字符串**。

var s=“cat,bat,hat,rat”
var r=s.replace(/.at/g,function(){
console.log(arguments[0]); //模式匹配项(此时是"cat")
console.log(arguments[1]);
console.log(arguments[2]);
console.log(arguments[3]);
console.log(“倒数第二个参数”+arguments[arguments.length-2]); //模式匹配项在字符中的位置
console.log(“最后一个参数”+arguments[arguments.length-1]); //原始字符串
return “ing”
})
console.log® // “cing,bing,hing,ring”

<h2 id="dtnz">单体内置对象</h2>
由ECMAScript提供的,不依赖宿主环境对象,如`Object`, `Array`, `String`,`Global`, `Math`
|URI编码方法|对URI进行编码/解码|
|:-|:-|
|encodeURI(*string*)|主要用于对整个URI编码, 不会对特殊字符进行编码。|
|encodeURIComponent(*string*)|主要用于对URI中的某一段进行编码, 会对任何非标准字符进行编码。|
|decodeURI(*string*)|只能对encodeURI()替换的字符进行解码|
|decodeURIComponent(*string*)|用于对encodeURIComponent()编码过的字符进行解码, 可以解码任何特殊字符的编码|<h5>eval()方法</h5>
eval(*"code"*)接收一个参数, 即要执行的**JavaScript字符串**。通过eval()执行的代码, **与eval()自身所在的环境作用域是相同的。**
在eval()中创建的任何变量和函数都**不会得到变量提升**。
严格模式下对eval赋值会导致错误, 在外部也访问不了eval()中创建的任何变量和函数。<h5>Math对象</h5>
Math对象用于数学计算
|Math对象的属性|一些数学计算中可能用到的特殊值|
|:-|:-|
|`Math.E`|常量e|
|`Math.PI`|即π, 圆周率|
|`Math.LN10`|10的自然对数|
|`Math.SQRT1_2`|$\dfrac{1}{2}$的平方根|
|`Math.SQRT2`|2的平方根||Math对象的方法|数学计算的方法|
|:-|:-|
|**Math**.max(*Number+*)|接收多个数值参数, 返回其中的**最大值**|
|**Math**.min(*Number+*)|接收多个数值参数, 返回其中的**最小值**|
|**Math**.ceil(*Number*)|对参数进行**向上舍入**, 并返回。|
|**Math**.floor(*Number*)|对参数进行**向下舍入**, 并返回。|
|**Math**.round(*Number*)|对参数进行**四舍五入**, 并返回。|
|**Math**.random()|返回大于等于0小于1的一个随机数(0≤x<1)<br>可以用`Math.random()*可能值的总数+初始值`来从某个范围内随机选择一个数<br>如:`Math.floor(Math.random()*9+2)`从2-10中选一个数|
|**Math**.abs(*Number*)|返回绝对值|
|**Math**.exp(*Number*)|返回e的*number*次幂|
|**Math**.pow(*Number*,*power*)|返回*number*的*power*次幂|
|**Math**.sqrt(*Number*)|返回*number*的平方根|
|**Math**.log(*Number*)|返回*number*的**自然对数**|
|**Math**.sin(*x*)|返回*x*的正弦值|
|**Math**.asin(*x*)|返回*x*的反正弦值|

JavaScript 引用类型 读书笔记相关推荐

  1. JavaScript设计模式读书笔记(一)= 创建型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  2. JavaScript设计模式读书笔记(四)= 技巧型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  3. JavaScript百炼成仙读书笔记

    JavaScript百炼成仙 作者:剽悍一小兔 没事儿的时候多读书还是蛮好的,这本书给我的感觉就像是真的在看修仙人士不断修炼去打怪升级一样,以不一样的视角重新温习了一遍前端的知识,和以往所读的其他书籍 ...

  4. javascript秘密花园读书笔记

    toString()方法:当数字字面量使用这个方法时会出现错误,这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分.      例:2.toString() ...

  5. JavaScript模式读书笔记 第3章 字面量和构造函数

    1,对象字面量     -1,Javascript中所创建的自定义对象在任务时候都是可变的.可以从一个空对象开始,根据需要增加函数.对象字面量模式可以使我们在创建对象的时候向其添加函数.       ...

  6. JS闭包—你不知道的JavaScript上卷读书笔记(二)

    关于闭包,初学者会被绕的晕头转向,在学习的路上也付出了很多精力来理解. 让我们一起来揭开闭包神秘的面纱. 闭包晦涩的定义 看过很多关于闭包的定义,很多讲的云里雾里,晦涩难懂.让不少人以为闭包是多么玄乎 ...

  7. 《Maintainable JavaScript》读书笔记

    CHAPTER 1 Basic Formatting (1)Indentation Levels: 使用tab对代码进行缩进,以此来体现代码的结构和层次. 1 if( isMatch === true ...

  8. 你不知道的JavaScript 上卷读书笔记

    看了<你不知道的JavaScript 上>,为了防止自己忘记,特此记下与我而言的部分重点 任何足够先进的技术都和魔法无异. --Arthur C. Clarke 作用域和闭包 编译原理 分 ...

  9. JavaScript模式读书笔记 第5章 对象创建模式

    1,命名空间模式  namespace   <script> var myApp = {};//通过全局变量来实现命名空间 maApp.Parent = function (){   }; ...

最新文章

  1. docker+springboot部署总结
  2. 【Demo 0085】导出EXE文件资源
  3. 设计模式7----代理模式
  4. 一个独立程序员对自己近九个月工作生活的回顾
  5. Reachability的用法 判断用户的网络状态
  6. php微信回调验证签名,微信支付回调验证签名处理
  7. 北京大学生物信息学(8)
  8. Dropbox的服务器和网络自动化运维实践
  9. 5.PSR-7: HTTP message interfaces
  10. 29. JavaScript - 测试 jQuery
  11. kido机器人用流量吗_拉在手心的爱-----乐视 KIDO有问必答的4G智能儿童手表评测...
  12. R语言metafor包预后meta分析复现
  13. L2TP/IPSec一键安装脚本
  14. id门禁卡复制到手机_使用iPhone解锁开门?手机复制门禁卡教程分享
  15. 如何进行探索性数据分析
  16. iphone11系列的尺寸_iPhone 11、11 Pro、11 Pro Max vs iPhone XR、XS、XsMax比较
  17. 计算机开机高级设置密码,给电脑设置开机密码
  18. win服务器系统安全模式,安全模式详解
  19. Word 远程调用失败:异常来自 HRESULT:0x800706BE
  20. 腾讯低代码(lowcode)行列布局

热门文章

  1. 《Java小子怒闯数据结构九重天》第三重天——栈
  2. win7虚拟机上安装visual studio2017社区版的相关问题以及解决办法
  3. 全球各国as自治系统总数排名、全球自治系统总数排名
  4. 第11课:JSP指令 Include指令 Taglib指令 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  5. 数据仓库——ODS/stg层数据漂移问题
  6. java polygon 用法_从Polygon对象的Java中更新几何图形
  7. java饲养员喂动物案例,封装、继承、多态、接口
  8. 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验三
  9. ES6新特性16-Class
  10. 关于用盐去黑头的亲身经历~ - 生活至上,美容至尚!