js红宝书学习笔记(一)引用类型
一.引用类型
ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构
创建Object 实例的两种方式:
new操作符跟Object构造函数
-
var person = new Object();
-
person.name ="Nicholas";
-
person.age=29;
对象字面量表示法
向函数传递大量可选参数的首选方式
-
var person = {
-
name :"Nicholas",
-
age:29
-
};
例子:
function displayInfo(args){ var output=""; if(typeof args.name=="String"){ output += "Name:" + args.name; } if(typeof args.age=="number"){ output += "Age:" + args.age; } alert(output); } dispalyInfo({ name: "Nicholas", age: 29 }) displayInfo({ name: "Greg" });
2.Array类型
ECMAScript数组与其他语言中的数组都是数据的有序列表,与其他语言不同的是,ECMAScript数组的每一项都可以保存任何类型的数据
创建数组的两种方式:
- 使用Array构造函数
-
var colors = new Array();
-
var colors = new Array(20);// 创建一个包含 20 项的数组
-
var colors = new Array("red", "blue", "green"); 创建一个包含 3 项,即字符串""red", "blue", "green"的数组
- 使用数组字面量表示法
-
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
-
var names = []; // 创建一个空数组
-
var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组
-
var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组
数组的项数可以增加--减少
-
var colors=["red","blue","green"];//定义一个字符串数组
-
alert(colors[0]);显示第一项
-
colors[2] ="black"//修改第三项
-
colors[3] ="brown";// 新增第四项
-
----数组就会自动增加到该索引值加 1 的长度
-
var colors =["red","blue","green"]// 创建一个包含 3 个字符串的数组
-
colors.length = 2;
-
alert(colors[2]);
3.判断对象是不是数组的经典问题
-
if(value instanceof Array){
-
//对数组执行某些操作
-
}
存在问题:
他假定只有一个全局执行环境。如果网页中包含多个框架,实际上存在两个以上不同全局执行环境,从而存在两个不同版本的Array构造函数
解决方案:
-
if(Array.isArray(Value)){
-
}
-
var colors=["red","blue","green"]
-
alert(colors.toString());// red,blue,green
-
alert(colors.valueOf()); // red,blue,green
-
alert(colors); // red,blue,green
-
var colors=["red","green","blue"];
-
alert(colors.join(","));//red,green,blue
-
alert(colors.join("||")); //red||green||blue
二.栈方法
- 栈是一种LIFO(Last-In-First-Out)后进先出的数据结构,最新添加的项最早被移除
- 栈中项的插入(推入)和移除只发生在栈的顶部
push方法和pop方法
-
var colors=new Array();//创建一个数组
-
var count=colors.push("red","green");//推入两项
-
alert(count); //2
-
count = colors.push("black"); // 推入另一项
-
alert(count); //3
-
var item = colors.pop(); // 取得最后一项
-
alert(item); //"black"
-
alert(colors.length); //2
三.队列方法
- 栈数据结构----LIFO(后进先出) push方法和pop方法
- 队列数据结构--FIFO(先进先出)push方法和shift方法
-
var colors = new Array(); //创建一个数组
-
var count = colors.push("red", "green"); //推入两项
-
alert(count); //2
-
count = colors.push("black"); //推入另一项
-
alert(count); //3
-
var item = colors.shift(); //取得第一项
-
alert(item); //"red"
-
alert(colors.length); //2
- unshifit():数组前端添加任意各项并返回新数组长度
- unshift()和pop方法,可以相反的方向模拟队列,即在数组的前端添加项,在数组的末端移除项
四.迭代方法
- filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
- forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item, index, array){ return (item > 2); }); alert(everyResult); //false var someResult = numbers.some(function(item, index, array){ return (item > 2); }); alert(someResult); //true var numbers = [1,2,3,4,5,4,3,2,1]; var filterResult = numbers.filter(function(item, index, array){ return (item > 2); }); alert(filterResult); //[3,4,5,4,3] var numbers = [1,2,3,4,5,4,3,2,1]; var mapResult = numbers.map(function(item, index, array){ return item * 2; }); alert(mapResult); //[2,4,6,8,10,8,6,4,2] var numbers = [1,2,3,4,5,4,3,2,1]; numbers.forEach(function(item, index, array){ //执行某些操作 });
reduce()和reduceRight()函数
-
var values = [1,2,3,4,5];
-
var sum = values.reduce(function(prev, cur, index, array){
-
return prev + cur;
-
});
-
alert(sum); //15
五.Function 类型
- 函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
- 函数通常使用函数声明语法定义
函数是对象,函数名是指针
函数定义的两种方式:
-
function sum (num1, num2) {
-
return num1 + num2;
-
}
-
-
var sum = function(num1, num2){
-
return num1 + num2;
-
};
-
-
var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐
六.没有重载
- 两个同名函数,而结果则是后面的函数覆盖了前面的函数
- 在创建第二个函数时,实际上覆盖了引用第一个函数的变量
七.基本包装类型
引用类型与基本包装类型的主要区别是对象的生存期
- 使用new操作符创建的引用类型实例,会存在内存种直到销毁
- 自动创建的基本包装类型的对象,只存在于代码执行的瞬间,然后被立即销毁
八.Boolean类型(建议不要使用Boolean对象)
js红宝书学习笔记(一)引用类型的更多相关文章
- OpenGL红宝书学习笔记(1)
OpenGL对场景中的图像进行渲染时所执行的主要操作: 1.根据几何图元创建形状,从而建立物体的数学描述,(OpenGL把点,直线,多边形和位图作为基本的图元) 2.在三维空间中排列物体,并选择观察复 ...
- 第5章 引用类型---JS红宝书书摘系列笔记
在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法.而对象是某个特定引用类型的实例. 一.Object类型 可以通过Object构造函数创 ...
- 第4章 变量、作用域和内存---JS红宝书书摘系列笔记
一.基本类型和引用类型 ECMAScipt变量可能分为两种数据类型:基本类型和引用类型. 基本类型:指简单的数据段:包括Undefined.Null.Boolean.Number.String:可以操 ...
- JS红宝书笔记——第一章 JavaScript简介
1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...
- 【转载】关于在vs2013中配置opengl红宝书第八版环境
本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...
- OpenGl编程指南第7版(红宝书)环境配制
环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...
- 《JS高程》事件学习笔记
事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...
- 从今日起,我会把OpenGL红宝书上的例子用完整的代码形式写在我的博客中,
1.使用教程:OpenGL红宝书第8版 2.使用的库工具:GLEW和GLFW 3.使用的IDE:vs2012 4.说说目的:完整的看一遍OpenGL,加深印象并且熟练掌握运用OpenGL 5.欢迎有相 ...
- [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行
Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...
随机推荐
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- 羽夏看Linux内核——段相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- HTTP 协议概述
什么是 HTTP 协议 什么是协议? 协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议. 所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP ...
- 如何仿造websocket请求?
之前两次singnalr. websocket实时推送相关: .NET WebSockets 核心原理初体验 SignalR 从开发到生产部署避坑指南 tag: 浏览器--->nginx--&g ...
- Spherical类定义和实现
此类是一个全景摄像机视角,书上介绍了详细原理.直接给实现代码. 类声明: #pragma once #ifndef __SPHERICAL_HEADER__ #define __SPHERICAL_H ...
- 【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示
前言:Maui终于在昨天(2022年8月9日)推送出来了.今儿就迫不及待来把玩一下先. A.我本地已有VS2022,不过版本比较老,此处选择更新.工具 -> 获取功能和更新里面,可以获取到新版本 ...
- RS485自动收发切换电路 [原创www.cnblogs.com/helesheng]
RS485是最常见的一种远距离可靠传输和组网的UART串口信号接口协议.与同样传输UART串口信号的RS422协议相比,RS485使用半双工通信,即只有一个信道,在同一时刻要么从A到B,要么从B到A传 ...
- Web 前端实战:Gitee 贡献图
前言 这次要做的 Web 前端实战是一个 Gitee 个人主页下的贡献图(在线 Demo),偶尔做一两个,熟悉熟悉 JS 以及 jQ.整体来说这个案例并不难,主要是控制第一个节点以及最后一个节点处于星 ...
- HTML初学者小知识2
网页内嵌 代码以及演示如下 代码 <div id="tab_1"> <iframe src="div.html" height="5 ...
- 京东云PostgreSQL在GIS场景的应用分享
在地图或地理信息有关的场景里,地址关键词的检索尤其重要.比如打开百度地图,想要查询某个位置的信息"北京市海淀区清华东路17号中国农业大学",往往我们输入的是关键词"中国农 ...
