《JavaScript高级程序设计》读书笔记(五)引用类型
内容
---使用对象
---创建并操作数组
---理解基本的JavaScript类型
---使用基本类型和基本包装类型
引用类型
--引用类型的值(对象)是引用类型的一个实例
--在ECMAScript中,引用类型是一种数据结构
--用于将数据和功能组织在一起,也常称为类(并不妥当)
--尽管ECMAScript从技术上讲是一门面向对象的语言
--但是它不具备传统的面向对象语言所支持的类和接口等基本结构
--引用类型有时候也被成为对象定义,描述一类对象所句有的属性和方法
--引用类型和类并不是一个概念
--使用new操作符后跟一个构造函数来创造新的对象
--构造函数本身就是一个函数,只不过该函数处于创建新对象的目的而定义
var person = new Object();
--创建Object引用类型的一个新实例,并保存在变量person中
--Object只为新对象定义了默认的属性和方法
Object类型
--使用new操作符后跟一个构造函数来创建Object实例
var person = new Object();
person.name = "luking";
person.age = 22;
--使用对象字面量表示法
--不会调用Object构造函数
var person = {
name:"luking",
age:22,
"str":"asdasd"
};
--数值属性名会自动转化为字符串
var person = {}; //等同于new Object()
--访问对象属性时,可以使用点表示法,也可使用方括号语法
--方括号语法可以接受变量
person.name;
person["name"];
var name = "name";
person[name];
person["first name"]; //点表示法无法访问这种属性
Array类型
--ECMAScript中的数组的每一项可以保存不同类型的值
--大小是动态的,可以随着数据的添加自动增长
--使用Array构造函数,创建数组
var colors = new Array(); //[]
var colors = new Array(10); //[empty x 10]
var colors = new Array("red","green","blue"); //["red","green","blue"]
--可以省略new 操作符
--使用数组字面量表示法创建
--不会调用Array构造函数
var colors = [];
var colors = ["red","green","blue"];
var colors = [1, 2, , ]; //不建议
--空的逗号代表值为undefined
--最后一位加逗号,一般浏览器不识别,IE8-会识别并多一位undefined
--从0开始的索引,读取数组
--数组length属性表示数组长度
--length是动态的,修改其值,会增加(undefined)或着删除数组项
--为超出length的索引项设置值,会更新length属性
--中间的未赋值项是undefined
--length上限为42亿
--添加超过上限的项会异常
--初始大小于上限接近的数组,会运行时间超长的脚本错误
检测数组
--对于同一个全局作用域 instanceof可以判断是不是array
-- value instanceof Array
--如果页面中包含多个框架,就会有多个全局执行环境
--就会有两个以上不同版本的Array构造函数
--es5新增Array.isArray()方法判断是不是数组
转换方法
--对象都具有,toLocaleString().toString()和valueOf()方法
--toString()方法返回数组每一项的字符串形式以逗号拼接的一个字符串
--会调用每一项的toString()方法,拼接成整个字符串
--valueOf() 返回这个数组的指针
--alert(),会自动调用toString()方法用于输出字符串
var a = [1,2,"red"];
a.toString(); //"1,2,red"
a.valueOf(); //[1,2,"red"]
--toLocaleString()方法于toString()类似
--toLocaleString()会调用每一项的tolocalString()方法
var person1 = {
toLocaleString:function() {
return "local1";
},
toString:function() {
return "string1";
}
};
var person2 = {
toLocaleString:function() {
return "local2";
},
toString:function() {
return "string2";
}
};
var people = [person1,person2];
people.toString(); //"string1,string2"
people.toLocaleString();//"local1,local2"
--tolocaleString(),toString(),valueOf()默认以逗号分隔
--join(String)函数会返回以String为分割符的数组字符串
--String不写或传递undefined 默认以逗号分隔
--传入null 则会以"null"为分割符
--如果某一项是null或者undefined,
--tolocaleString(),toString(),valueOf(),join()都以空字符串对待
var colors = ["red", "blue", "green"];
colors.join("-"); //"red-blue-green"
colors.join(); //"red,blue,green"
var u = undefined;
var n = null;
colors.join(u); //"red,blue,green"
colors.join(n); //"rednullbluenullgreen"
栈方法
--数组提供实现栈操作的方法,来把数组当成栈数据结构来使用
--栈 LIFO(last-in-first-out,后进先出),最新添加的项最早被移除
--栈中项的插入(推入)和移除(弹出),只发生在栈顶
--push() 入栈,pop() 出栈
--push(args,....) 可推入任意数量的参数,推入栈中,并修改length的长度,并返回
--pop() 弹出最后一项,并length-1
队列方法
--FIFO first-in-first-out 先进先出
--shift(); 取得数组第一项,并length-1
--push(args,...),同上
--unshift(args,...) 在数组前端插入任意长度项,并修改length长度,并返回length
--参数顺序 就是插入后 项的顺序,不会颠倒过来
--结合pop()方法,可实现反向队列
重排序方法
--返回值都是重排之后的数组的索引值
reverse() 反转数组序列
--直接对原数组反转,影响原数组
sort(function) 排序
--默认升序排序,调用每一项的toSting()方法,进行字符串排序
--可接受一个比较函数实现自定义排序
--比较函数接受两个参数a,b
--a<b return 负数, a==b return 0,a>b return 正数
function compare(v1, v2) {
if(v1 < v2) {
return-1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
}
var vs = [0, 1, 5, 10, 15];
vs.sort(); //[0, 1, 10, 15, 5]
vs.sort(compare); //[0, 1, 5, 10, 15]
--改变compare的返回值可以实现不同的排序
--对于数值类型或者valueOf()会返回数值的对象类型可以简化compare函数
function compare(v1, v2) {
return v2 - v1;
}
数组操作方法
concat(args,....);
--基于当前数组的所有项创建一个新副本,并把接受的参数添加到这个副本的末尾
--如果参数是数组,则把每一项都添加到副本中
--如果不是数组,则简单的添加
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["blcak", "brown"]);
colors; //["red", "green", "blue"]
colors2; //["red", "green", "blue", "yellow", "blcak", "brown"]
slice(start[,end])
--基于当前数组的一段(一个或者多个)创建新数组,一个参数或者两个
--参数表示返回项的起始和结束,[start,end) 左闭右开
--如果参数是负数,表示倒数,
--开始位置必须在结束位置左边,否则取段无效,返回空数组
--不在范围的取段 返回空数组
var v = [0,1,2,3,4,5];
v.slice(0,3); //[0, 1, 2]
v.slice(2,3); //[2]
v.slice(2); //[2, 3, 4, 5]
v.slice(0,-2); //[0, 1, 2, 3]
v.slice(-1,-2); //[]
v.slice(-2,-1); //[4]
《JavaScript高级程序设计》读书笔记(五)引用类型的更多相关文章
- javascript高级程序设计读书笔记-事件(一)
读书笔记,写的很乱 事件处理程序 事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别 没有DOM1 同样的事件 DOM0会顶掉html事件 因为他们都是属性 而 ...
- 《JavaScript高级程序设计》笔记:引用类型(五)
Object类型 创建object实例方法有两种.第一种方法使用new操作符后跟object构造函数.如下: var person=new Object(); person.name="Ni ...
- javascript高级程序设计读书笔记----引用类型
Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new ...
- JavaScript高级程序设计 读书笔记
第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...
- javascript高级程序设计读书笔记
第2章 在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...
- Javascript高级程序设计读书笔记(第六章)
第6章 面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...
- javascript高级程序设计 读书笔记2
第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建 ...
- JavaScript高级程序设计-读书笔记(7)
第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...
- JavaScript高级程序设计-读书笔记(2)
第6章 面向对象的程序设计 创建对象 1.最简单方式创建Object的实例,如 var person = new Object(); person.name = “Greg”; person.age ...
- JavaScript高级程序设计-读书笔记(1)
第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l ECMAScript:提供核心语言功能: l 文 ...
随机推荐
- c++指针实例
#include <iostream> using namespace std; int main () { ; // 实际变量的声明 int* ip; // 指针变量的声明 ip = & ...
- 第四十一篇 入门机器学习——Numpy的基本操作——聚合操作
No.1. 对向量元素求和使用np.sum,也可以使用类似big_array.sum()的方式 No.2. 对向量元素求最小值使用np.min,求最大值使用np.max,也可以使用类似big_arra ...
- STM32F103之定时器学习记录
/==============翻译STM32F103开发手册定时器部分========================/ 14 高级控制计时器(TIM1和TIM8) 14.1 TIM1和TIM8介绍 ...
- AcWing 905. 区间选点
//1.将每个区间按右端点从小到大排序 //2.从前往后依次枚举每个区间,如果当前区间中已经包含点,就直接跳过,否则,选择当前区间的右端点 //选右端点的话,可以尽可能的包含在多个区间里 #inclu ...
- 联想小新潮怎么修改fn热键以及怎么进入bios状态
联想小新潮怎么修改fn热键 http://www.ylmfwin100.com/ylmfnew/11129.html 怎么进入bios状态 https://zhidao.baidu.com/que ...
- 牛客多校第二场H Second Large Rectangle 单调栈or悬线法
Second Large Rectangle 题意 给出n*m的01矩阵,问由1组成的第二大的矩阵的大小是多少? 分析 单调栈(or 悬线法)入门题 单调栈 预处理出每一个点的最大高度,然后单调栈每一 ...
- Javaweb项目的命名规范
项目名称:一般是英文 包名:公司域名的倒写,例如com.baidu 数据访问层:dao,persist,mapper 实体:entity,model,bean,javabean,pojo 业务逻辑:s ...
- 初识hadoop --- (分布式文件系统 + 分块计算)
[转载] + 整理 2016-11-18 使用范围: Hadoop典型应用有:搜索.日志处理.推荐系统.数据分析.视频图像分析.数据保存等. Hadoop历史 雏形开始于2002年的Apache的Nu ...
- [2020BUAA软工助教]第1次个人作业
热身作业(阅读) 一.前言 我认为人生就是一次次地从<存在>到<光明>. 二.软件工程师的成长 博客索引 同学们在上这门课的时候基本都是大三,觉得在大学里,到教室来听课有意思么 ...
- Knapsack Cryptosystem 牛客团队赛
时限2s题意: 第一行包含两个整数,分别是n(1 <= n <= 36)和s(0 <= s <9 * 10 18) 第二行包含n个整数,它们是{a i }(0 <a i ...