一.引用类型

ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构

创建Object 实例的两种方式:

new操作符跟Object构造函数


  1. var person = new Object();
  2. person.name ="Nicholas";
  3. person.age=29;

对象字面量表示法

向函数传递大量可选参数首选方式


  1. var person = {
  2. name :"Nicholas",
  3. age:29
  4. };

例子:


  1. function displayInfo(args){
  2. var output="";
  3. if(typeof args.name=="String"){
  4. output += "Name:" + args.name;
  5. }
  6. if(typeof args.age=="number"){
  7. output += "Age:" + args.age;
  8. }
  9. alert(output);
  10. }
  11. dispalyInfo({
  12. name: "Nicholas",
  13. age: 29
  14. })
  15. displayInfo({
  16. name: "Greg"
  17. });

2.Array类型

ECMAScript数组与其他语言中的数组都是数据的有序列表,与其他语言不同的是,ECMAScript数组的每一项都可以保存任何类型的数据

创建数组的两种方式:

  • 使用Array构造函数

  1. var colors = new Array();
  2. var colors = new Array(20);// 创建一个包含 20 项的数组
  3. var colors = new Array("red", "blue", "green"); 创建一个包含 3 项,即字符串""red", "blue", "green"的数组
  • 使用数组字面量表示法

  1. var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
  2. var names = []; // 创建一个空数组
  3. var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组
  4. var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组

数组的项数可以增加--减少


  1. var colors=["red","blue","green"];//定义一个字符串数组
  2. alert(colors[0]);显示第一项
  3. colors[2] ="black"//修改第三项
  4. colors[3] ="brown";// 新增第四项
  5. ----数组就会自动增加到该索引值加 1 的长度
数组length属性特点---不是只读的,设置这个属性,将数组的末尾移除项或者向数组中添加新项

  1. var colors =["red","blue","green"]// 创建一个包含 3 个字符串的数组
  2. colors.length = 2;
  3. alert(colors[2]);

3.判断对象是不是数组的经典问题


  1. if(value instanceof Array){
  2. //对数组执行某些操作
  3. }

存在问题:

他假定只有一个全局执行环境。如果网页中包含多个框架,实际上存在两个以上不同全局执行环境,从而存在两个不同版本的Array构造函数

解决方案:


  1. if(Array.isArray(Value)){
  2. }

  1. var colors=["red","blue","green"]
  2. alert(colors.toString());// red,blue,green
  3. alert(colors.valueOf()); // red,blue,green
  4. alert(colors); // red,blue,green

  1. var colors=["red","green","blue"];
  2. alert(colors.join(","));//red,green,blue
  3. alert(colors.join("||")); //red||green||blue

二.栈方法

  • 栈是一种LIFO(Last-In-First-Out)后进先出的数据结构,最新添加的项最早被移除
  • 栈中项的插入(推入)和移除只发生在栈的顶部

push方法和pop方法


  1. var colors=new Array();//创建一个数组
  2. var count=colors.push("red","green");//推入两项
  3. alert(count); //2
  4. count = colors.push("black"); // 推入另一项
  5. alert(count); //3
  6. var item = colors.pop(); // 取得最后一项
  7. alert(item); //"black"
  8. alert(colors.length); //2

三.队列方法

  • 栈数据结构----LIFO(后进先出) push方法和pop方法
  • 队列数据结构--FIFO(先进先出)push方法和shift方法

  1. var colors = new Array(); //创建一个数组
  2. var count = colors.push("red", "green"); //推入两项
  3. alert(count); //2
  4. count = colors.push("black"); //推入另一项
  5. alert(count); //3
  6. var item = colors.shift(); //取得第一项
  7. alert(item); //"red"
  8. alert(colors.length); //2
  • unshifit():数组前端添加任意各项并返回新数组长度
  • unshift()和pop方法,可以相反的方向模拟队列,即在数组的前端添加项,在数组的末端移除项

四.迭代方法

  • filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
  • forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  • some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
  • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

  1. var numbers = [1,2,3,4,5,4,3,2,1];
  2. var everyResult = numbers.every(function(item, index, array){
  3. return (item > 2);
  4. });
  5. alert(everyResult); //false
  6. var someResult = numbers.some(function(item, index, array){
  7. return (item > 2);
  8. });
  9. alert(someResult); //true
  10. var numbers = [1,2,3,4,5,4,3,2,1];
  11. var filterResult = numbers.filter(function(item, index, array){
  12. return (item > 2);
  13. });
  14. alert(filterResult); //[3,4,5,4,3]
  15. var numbers = [1,2,3,4,5,4,3,2,1];
  16. var mapResult = numbers.map(function(item, index, array){
  17. return item * 2;
  18. });
  19. alert(mapResult); //[2,4,6,8,10,8,6,4,2]
  20. var numbers = [1,2,3,4,5,4,3,2,1];
  21. numbers.forEach(function(item, index, array){
  22. //执行某些操作
  23. });

reduce()和reduceRight()函数


  1. var values = [1,2,3,4,5];
  2. var sum = values.reduce(function(prev, cur, index, array){
  3. return prev + cur;
  4. });
  5. alert(sum); //15

五.Function 类型

  • 函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
  • 函数通常使用函数声明语法定义

函数是对象,函数名是指针

函数定义的两种方式:


  1. function sum (num1, num2) {
  2. return num1 + num2;
  3. }
  4. var sum = function(num1, num2){
  5. return num1 + num2;
  6. };
  7. var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐

六.没有重载

  • 两个同名函数,而结果则是后面的函数覆盖了前面的函数
  • 在创建第二个函数时,实际上覆盖了引用第一个函数的变量

七.基本包装类型

引用类型与基本包装类型的主要区别是对象的生存期

  • 使用new操作符创建的引用类型实例,会存在内存种直到销毁
  • 自动创建的基本包装类型的对象,只存在于代码执行的瞬间,然后被立即销毁

八.Boolean类型(建议不要使用Boolean对象)

js红宝书学习笔记(一)引用类型的更多相关文章

  1. OpenGL红宝书学习笔记(1)

    OpenGL对场景中的图像进行渲染时所执行的主要操作: 1.根据几何图元创建形状,从而建立物体的数学描述,(OpenGL把点,直线,多边形和位图作为基本的图元) 2.在三维空间中排列物体,并选择观察复 ...

  2. 第5章 引用类型---JS红宝书书摘系列笔记

    在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法.而对象是某个特定引用类型的实例. 一.Object类型 可以通过Object构造函数创 ...

  3. 第4章 变量、作用域和内存---JS红宝书书摘系列笔记

    一.基本类型和引用类型 ECMAScipt变量可能分为两种数据类型:基本类型和引用类型. 基本类型:指简单的数据段:包括Undefined.Null.Boolean.Number.String:可以操 ...

  4. JS红宝书笔记——第一章 JavaScript简介

    1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...

  5. 【转载】关于在vs2013中配置opengl红宝书第八版环境

     本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...

  6. OpenGl编程指南第7版(红宝书)环境配制

    环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...

  7. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

  8. 从今日起,我会把OpenGL红宝书上的例子用完整的代码形式写在我的博客中,

    1.使用教程:OpenGL红宝书第8版 2.使用的库工具:GLEW和GLFW 3.使用的IDE:vs2012 4.说说目的:完整的看一遍OpenGL,加深印象并且熟练掌握运用OpenGL 5.欢迎有相 ...

  9. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

随机推荐

  1. 基于Vue.js2.6结合h5来实现视频播放画中画技术(Picture-in-Picture)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_125 在开发基于vue.js的在线视频教育平台的时候,我们会注意一个小问题,就是如果用户在观看播放视频的同时,也会往下拖动窗口浏览 ...

  2. Lua 语言

    # Lua是一种轻量.小巧的脚本语言,用标准C语言编写并以源码形式开发.设计的摸底是为了嵌入到其他应用程序中,从而为应用程序提供灵活的拓展和定制功能. # Lua安装 # 官网:https://www ...

  3. 在DELL服务器上安装windows2012 r2服务器系统

    主要过程: 1.准备安装光盘,开启服务器,当出现画面按F10进入服务器自带光盘系统安装向导.(若没有系统光盘,可以用软蝶通刻一个服务系统到+R的光盘).进入后选择设置和安装系统. 2.开始安装前,提示 ...

  4. 技术分享 | load data导致主键丢失的神秘问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1 ...

  5. 程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果

    谁说程序员不懂浪漫? 作为程序员,用自己的代码本事手搓一个技术感十足的惊喜,我觉得,这是不亚于车马慢时代手写信的古典主义浪漫. 那么,应该怎样创作出具有自我身份属性的浪漫惊喜呢? 玩法很多,今天给大家 ...

  6. 解决beego运行程序报错问题:stderr: go: github.com/astaxie/beego@v1.12.1: missing go.sum entry

    使用命令bee new beegodemo02创建beego程序后,使用VScode打开后,便会报错无法运行,报错信息如下: Error loading workspace: err: exit st ...

  7. Linux 01 概述

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 简介 Linux ...

  8. [游记]CSP 2021 J/S

    这一次,也许是我的OI生涯的转折点了--能过,学习OI的时间就不会减少:但不能过,就会减少学习OI的时间-- 上午(S组) 6:00起床.去吃早餐,结果因为边喝粥边喝牛奶导致肚子疼.(我在这里劝大家, ...

  9. 【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法

    问题描述 在App Service for Windows的环境中,当前只提供了PHP 7.4 版本的选择情况下,如何实现自定义PHP Runtime的版本呢? 如 PHP Version 8.1.9 ...

  10. 洛谷P4135 作诗(不一样的分块)

    题面 给定一个长度为 n n n 的整数序列 A A A ,序列中每个数在 [ 1 , c ] [1,c] [1,c] 范围内.有 m m m 次询问,每次询问查询一个区间 [ l , r ] [l, ...