第五章 引用类型

  对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起。描述的是一类对象所具有的属性和方法。对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建的,构造函数本身就是一个函数,只不过该函数试处于创建新对象的目的而定义的。  eg:  

 var person = new Object();

  1.创建Object实例的方式有两种   一:new+Object                二:对象字面量

                 var person = new Object();            var person = {

                 person.name = "Andy";               name:"Andy",  //这里是逗号    属性可以用引号括                                                    起来 表示为字符串

                 person.age = 29;                    age:29};   //29后面不要+,因为是最后一个属性

 对象字面量语法推荐只在考虑对象属性名的可读性时使用。,在用此方法定义对象时,不会调用Object构造函数。一般的开发人员更青睐字面量语法,因为代码少,有封装的感觉。字面量也是向函数传递大量可选参数的首选方式。eg:

        function displayInfo(args){

         var output = "";

         if(typeof args.name == "string"){

            output+="Name:"+args.name+"\n";

            } 

         if(typeof args.age == "number"){

            output+="age:"+args.age+"\n";

            } 

          alert(output);

         }

         displayInfo({

          name:"Andy", 

          age:29

          }); //Name:Andy

           //age:29

          

        displayInfo({

          name:"zhou",

          });//Name:zhou

  2.一般来说,访问对象属性时使用点表示法,但是如果属性名中包含会导致语法错误的字符,或者属性名使用的时关键字或者保留字,就要使用【】方括号表示法

      eg:person[" first name"],通常,除非必须要使用变量来访问属性,否则建议使用点表示法。

  3.Array类型  数组是一组数据的有序列表,但是ES中的数组可以保存任意类型的数据,并且数组打大小时可以动态调整的。

  4.创建数组的基本方式:一 使用Array构造函数      var colors =new Array( x );参数可以为数值表示数组的初始长度  

                                           也可以为字符,表示初始数组的内容

             二  数组字面量表示法           var color = [args]             参数可以为空,或者时实际数组值,用逗号隔开,但是最后一个字符不可以是逗号

            与创建对象一样,字面表示法不会调用Array构造函数.

  5.在读取和设置数组的值时,要使用方括号 并提供相应值的基于0的数字索引。eg:colors[2]//读取第三项   设置:colors[2] = "red";  如果超出数组长度则自动增加到该索引值+1的长度。

      eg: var num = [0,1,2,3,4]   num[0] = 15//设置   num.length= 5;//增加5在末尾   num[99] =99;  //第100项为99    6-98为undefined  

  6.可以用instanceof 来检测某个对象是不是数组  value instanceof Array;   但是这个是假设在只有一个全局变量的环境下,如果包含多个框架就要用Array.isArray( X ) 来检测。

  7.数组有 toLocaleString(),toString()和valueOf()转换方法。调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。valueOf()返回的还是数组。

  join()使用不同的分隔符来构建这个字符串,只接受一个参数,即用作作为分隔符的字符串,然后返回包含所有数组项的字符串

    eg:num= [1,2,3,4,5];  num.join("!");//1!2!3!4!5   如果不传参数或者参数为undefined   则使用逗号作为分隔符  

  push()接受任意数量的参数,把他们逐个添加到数组末尾,返回修改后的                                 数组长度

  pop() 从数组未移除最后一项,减少length的值-1,返回                   移除的项

  shift()从数组未移除第一项,减少length的值-1,返回                   移除的项           

  unshift()接受任意数量的参数,把他们逐个添加到数组头部,返回修改后的                                 数组长度  

增加的返回数组长度,减少的返回删除项

  reverse()反转数组项的顺序

  sort()调用toString()转型方法,对数组进行排序,unicode编码小的排在前面。 由于是toString()所以[0,1,5,10,15].sort()//0,1,10,15,5

  sort()方法可以接受一个比较函数作为参数。比较函数接受两个参数,如果第一个参数应该位于第二个之前返回一个负数

                                  如果第一个参数应该位于第二个之后返回一个整数

                                  相等则返回0;   

              函数如下:  function compare(value1,value2){      或者   function compare(value1,value2){

                      if(value1<value2)               return value1-value2

                      {return -1;}                   } 

                      else  if(value1>value2)            var values = [0,1,5,10,15];

                      {return 1;}                   values.sort(compare);

                      else{return 0;}

                      }                          alert(values);//0,1,5,10,15

                    var values = [0,1,5,10,15];

                    values.sort(compare);

                    alert(values);//0,1,5,10,15

  8.concat(),基于当前数组创建一个数组副本,并将接收的参数(任意类型)添加到副本的末尾,最后构建一个新的数组。

   slice(),基于当前数组创建一个新数组,接受1-2个参数,即要返回的起始项和结束位置(不包括结束位置)没如果只有一个参数,则为起始项到一直到数组末尾,不影响原始数组。

   splice()   删除:接受2个参数   要删除的第一项的位置和要删除的项数 splice(1,2)删除第二 第三项

           插入:接受3个参数    起始位置,0,要插入的项    splice(2,0,"red","green") 从第三项开始插入red green

        替换:  接受三个参数   起始位置,要删除的项数,要插入的项    splice(2,1,"red","green")删除第三项,插入red green

  9.查找位置  indexOf( x ,【Y】)X为要查找的值,从前开始,返回值为X索引位置,Y为可选参数表示起始位置

        lastindex  从后开始

        charAt(num) 查找索引位置为num的值

  10.迭代方法

    以下五个方法接受两个参数:要在每一项上运行的函数和[运行该函数的作用域对象]

    every() 对数组中的每一项运行给定函数,如果函数对每一项都返回true 则返回true

    some() 对数组中的每一项运行给定函数,如果某一项返回true 则返回true

    filter()对数组中的每一项运行给定函数,挑选出返回true的项成立一个新的数组

    map()在原数组的上对每一项运行指定函数,返回每次函数调用的结果组成的数组

    forEach(),对数组的每一项运行指定函数,没有返回值

      var numbers = [1,2,3,4,5,6,7]

      var everyResult = numbers.every(function(item,index,array){

              return (item>2);

              });//false

      

      var everyResult = numbers.some(function(item,index,array){

              return (item>2);

              });//true

    

      var everyResult = numbers.filter(function(item,index,array){

              return (item>2);

              });//[3,4,5,6,7]

      

      var everyResult = numbers.map(function(item,index,array){

              return (item*2);

              });// [2,4,6,8,10,12,14]

  11.reduce() //从第一项开始,逐个遍历到最后

    reduceRight()//最后一项开始

    接受两个参数:在每一项上的函数和[作为归并基础的初始值]

        var values = [1,2,3,4,5];

        var sum = sum.reduce(function(pre,cyr,index,array){

            return prev+cur;

        });//15

javascript高级程序设计 读书笔记2的更多相关文章

  1. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  2. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  3. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

  4. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...

  5. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  6. JavaScript高级程序设计 读书笔记 第一章

    JavaScript是一种专门为与网页交互而设计的脚本语言 JavaScript实现 ECMAscript---核心 DOM---文档对象模型 BOM---浏览器对象模型

  7. Javascript高级程序设计读书笔记(第二章)

    第二章  在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...

  8. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  9. JavaScript高级程序设计-读书笔记(5)

    第13章 事件 1.事件流 事件流描述的是从页面中接收事件的顺序.IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕获流. (1)事件冒泡,即事件开始时由最具体的元 ...

  10. JavaScript高级程序设计-读书笔记(4)

    第11章 DOM扩展 1.选择符API Selector API Level 1 的核心是两个方法:querySelector()和querySelectorAll().在兼容的浏览器中,可以通过Do ...

随机推荐

  1. 移动端图片滚动加载-lazyload实现的要点总结

    最近在做移动端的营销页面时,遇到了页面有大量图片的情况,于是很自然的想到了要使用图片lazyload,PC端用着jQuery,也有现成的插件.但是在移动端,基本不用jQuery,于是就试着自己去造一下 ...

  2. BFC布局原理

    写这篇博客的初衷其实是在解决浮动的时候看到的这个方法,就想着BFC是什么,为什么可以清除浮动.结果不看不知道,一看越看越不明白,潜下心来研究看看,总结一下学习心得. 1.BFC是什么 BFC就是Box ...

  3. curl命令学习笔记

    下载文件并保存为默认文件名 curl -O http://www.xxx.com/xxx.exe 下载文件并保存为指定文件名 curl -o filename.exe http://www.xxx.c ...

  4. 在Android中引入Java8的lambda表达式

    我用的是retrolambda这个插件,下面来说下如何添加它. 项目地址:https://github.com/evant/gradle-retrolambda 在根项目的build.gradle中添 ...

  5. 出现( linker command failed with exit code 1)错误总结

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  6. 创建一个Android项目

    当我们的eclipse安装了SDK后,点击Window-->Perference-->DDMS.eclipse界面立即转为DDMS界面. 这时,我们可以打开我们的服务端(安卓模拟器或者是我 ...

  7. iOS做新浪微博sso授权登录遇到的一些坑

    新浪微博sso授权第三方登录,这里没有借助第三方框架,如shareSKD和友盟等,直接参考新浪官方SDK和文档. 过程中遇到几个坑,找了很久,好歹最后解决了,记录如下 问题1: _NSInlineDa ...

  8. HTML 特殊符号编码对照表

    HTML 特殊符号编码对照表 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η ...

  9. 《Unix网络编程 卷I》思维导图

    很久之前看完书总结的.这本经典教材讲的内容比较多,总结一下,方便理清思路[微笑].

  10. yii过滤xss代码,防止sql注入

    作者:白狼 出处:www.manks.top/article/yii2_filter_xss_code_or_safe_to_database 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明 ...