javascript笔记-拾遗补缺2-引用类型

  引用类型是一种数据结构,用于将数据和功能组织在一起。它描述的是一类对象所具有的属性和方法。Object是一个基础类型,Array是数组类型,Date是日期类型,RegExp是正则表达式类型,等。

  1. Object类型

    1. 创建:

      var dog = new Object();

      常应用于存储和传输数据。比如存储:

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

      创建的第二种方式:(在创建时,属性名也可以是字符串格式,即:可以给属性名加引号。)

      var person = {
                  name : "Nicholas",
                  age : 29
              };
    2. 取出属性值:person["name"];或者:person.name;
  2. Array类型
  3. 同一个数组可以保存任意类型的数据(大杂烩)。
    1. 数组可以动态调整(多加一个数据,它自己就增长一个长度,不是死的。)。
    2. 创建:

      var stars=new Array();//方式1
      var stars=new Array(20);//方式2
      var stars=new Array("周杰伦","林俊杰","孙燕姿");//方式3
      var stars=Array(20);//方式4
      var stars=["周杰伦","孙燕姿","林俊杰"];//方式6
    3. 动态调整示例:

      var stars=["周杰伦","林俊杰","孙燕姿"];
      stars[1]="JJ";//动态改变(把林俊杰变为JJ)
      stars[3]="皮裤汪";//动态增长(加了一个长度)
      stars.length=1;//动态强制缩减(林俊杰、孙燕姿、皮裤汪强制移除,长度变为1)
    4. 检测数组:Array.isArray(value);
    5. 用join()把数组转换成有分隔符的字符串:

      var stars = ["周杰伦", "王尼玛", "张全蛋"];
              alert(stars .join(","));      //周杰伦,王尼玛,张全蛋
              alert(stars .join("-"));     //周杰伦-王尼玛-张全蛋
    6. 可以像栈一样使用数组(pop()出来,push()进去)。
    7. 可以像队列一样使用数组。(结合shift()和push()):

      var stars = new Array();                      //create an array
              var count = colors.push("周杰伦", "王尼玛");       //push two items
              alert(count);  //2
      
              count = stars .push("张全蛋");                  //push another item on
              alert(count);  //3
      
              var item = colors.shift();                     //get the first item
              alert(item);   //周杰伦
              alert(colors.length);  //2
      /**所谓栈变队列,其实就是把栈颠倒过来再拉取*/
    8. 排序。
      1. reverse()翻转数组顺序;(返回经过排序后的数组)
      2. sort()从小到大排序。但是是按字符串排序,不是按数字排序:(返回经过排序后的数组)。

        1  var values = [0, 1, 5, 10, 15];
        2         values.sort();
        3         alert(values);    //0,1,10,15,5

        要想按你预期的方式排序,可以给sort()里面加一个比较函数当作参数:

        function compare(value1, value2) {
                    if (value1 < value2) {
                        return -1;
                    } else if (value1 > value2) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
        
                var values = [0, 1, 5, 10, 15];
                values.sort(compare);
                alert(values);    //0,1,5,10,15

        简化版本的比较函数(sort只关心返回的是正数、负数还是0):

        function compare(value1,value2){
          return value2 - value1;
        }
    9. 对数组的操作:联结、切片、拼接。
      1. 联结:使用concat,记忆:concat-->concatenate:连结,连锁。举例:

        var stars = ["周杰伦", "王尼玛", "张全蛋"];
                var stars 2= stars .concat("太子妃", ["花千骨", "梅长苏"]);
        
                alert(stars);     //周杰伦,王尼玛,张全蛋
                alert(stars2);    //周杰伦,王尼玛,张全蛋,太子妃,花千骨,梅长苏
      2. 切片。使用slice,记忆:slice翻译:切片。举例:

        var stars = ["梅长苏", "誉王", "靖王", "霓凰", "飞流"];
                var stars2= stars.slice(1);
                var stars3= stars.slice(1,4);
        
                alert(stars2);   //誉王,靖王,霓凰,飞流(从第一个位置开始切)
                alert(stars3);   //誉王,靖王,霓凰(从第1个位置切到第3个位置,4表示半封闭,不包含)
      3. 拼接。splice。功能强大。可以删除、插入、替换。
        1. 删除任意数量的项:比如:splice(0,2),删除第0,1项(半封闭区间)(返回删除项)。
        2. 指定位置插入任意数量的项:比如:splice(2,0,"周杰伦","王尼玛"),从第2个位置开始插入周杰伦、王尼玛两项。
        3. 指定位置插入任意数量的项且同时删除任意数量的项。比如:splice(2,1,"周杰伦","王尼玛"),从第2个位置删除1项,然后开始插入周杰伦、王尼玛两项。
    10. 位置方法:indexOf,lastIndexOf;
    11. 迭代方法:分为:全部合格才通过、任意一个合格就通过、过滤部分渣渣,一对一映射,迭代查询,缩减。
      1. 全部合格才通过:

        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

        上例中每一项都大于2才返回true。

      2. 任意一个合格就通过:

        var numbers = [1,2,3,4,5,4,3,2,1];
        
                var someResult = numbers.some(function(item, index, array){
                    return (item > 2);
                });
        
                alert(someResult);       //true

        上例中,有一个大于2就返回true。

      3. 过滤部分渣渣:

        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]

        上例中,把大于2的都过滤掉。

      4. 一对一映射:

        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]

        上例中,给每一项都乘以2.

      5. 迭代:使用for-each。
      6. 缩减:reduce。

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

        累加求和返回,5项缩为1项。 

  4. RegExp类型
    1. var expression=/ pattern / flags;
    2. flags分三种:g(global全局模式,应用于所有字符串)、i(case-insensive,忽略字母大小写)、m(multiline,多行模式,一行检验完了接着下一行。)。举例:

      /**匹配字符串中所有‘at‘的实例*/
      var pattern1=/at/g;
      /**匹配第一个‘bat‘或‘cat‘,不分大小写*/
      var pattern2 =/[bc]at/i;
      /**匹配所有以‘at‘结尾的3个字符组合,不分大小写*/
      var pattern3=/.at/gi;
    3. 模式中所有的元字符必须转义,元字符:( { [ \ ^ $ | ) ? * + . ] }
  5. Function类型
    1. 每个函数都是Function类型的实例,而且与其他引用类型一样,都有属性和方法。
    2. 函数的两种定义方法:方法1:

      function sum(a,b){
         return a + b;
      }

      方法2:

      var sum=function(a,b){
       return a + b;
      }
    3. 函数没有重载。
  6. Boolean、Number、String:基本包装类型
    1. var a="Jay Chou is a superstar";
      var b=a.substring(0,8);

      上例中,a是基本类型,但是a可以调用substring方法,是因为,后台自动完成a的包装操作,创建String类型的一个实例。Boolean,Number也类似。

  7. 单体内置对象,不需要实例化,直接使用,如:Math,Global。
    1. 所有全局作用域中定义的函数、变量,都是Global对象的方法,比如:parseInt,isNaN等。
    2. eval()方法也是Global对象的方法,它负责解析javascript。
    3. Math对象是保存数学公式和相关信息的。它有很多方法, 如:min求最小值,max求最大值,ceil()向上取整,floor向下取整,round四舍五入,random取随机数。
时间: 2024-08-12 21:22:33

javascript笔记-拾遗补缺2-引用类型的相关文章

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

[Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数

JavaScript笔记之Function

一.函数定义 (1)使用function declaration 格式:function functionName(parameters) { function body } 注:此种方式声明的函数作用域是全局的,即在声明之前可以调用 (2)使用function expression 格式:var name = function (parameters) { function body }; 注:与(1)不同,在声明之前不可以调用 (3)使用function constructor() 格式:v

javascript笔记(二)

concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; 4 5 console.log(s1.concat(s2,s3));//abc concat() 方法的结果等同于:result = s1 + s2 + ... + sN.如果有不是字符串的参数,则它们在连接之前将首先被转换为字符串. 数组中的concat():将参数添加为数组的元素,返回新的数组. 1 va

[Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式传递给eval函数以达到同样的功能.程序员面临一个选择:应该将代码表示为函数还是字符串?毫无疑问,应该将代码表示为函数.字符串表示代码不够灵活的一个重要原因是:它们不是闭包. 闭包回顾 看下面这个图 js的函数值包含了比调用它们时执行所需要的代码还要多的信息.而且js函数值还在内部存储它们可能会引用

[Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //"number" typeof "s";//"string" typeof null;//"object":ECMAScript把null描述为独特的类型,但返回值却是对象类型,有点困惑. 可以使用Object.prototype.t

JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)

四.Function类型: 1.函数定义的方法: 函数声明:function sum (num1, num2) {return num1 + num2;} 函数表达式:var sum = function(num1, num2){return num1 + num2;};//注意有个分号 构造函数的方式:var sum = new Function("num1", "num2", "return num1 + num2");// 2.函数的重复声

JavaScript笔记三:引用类型

1.Object对象 创建Object对象, var person = new Object();     var person = { Person.name = "guoliang";        name : "guoliang", Person.age = 20;                age : 20 }; 另外属性名也可以使用字符串,,第二种属于对象字面量表示法 访问对象属性可以使用"."或"[ ]",当

《JavaScript高级程序设计》读书笔记--(3)引用类型

ECMAScript从技术来说是一门面向对象的语言,但不具备传统的面向对象语言所支持的类和接口等基本结构.虽然引用类型与类看起来类似,但是他们并不是相同的概念.引用类型有时也被成为对象定义,因为它描述的是一类对象所具有的属性和方法. Object类型 创建Object实例的方式有两种.第一种是使用new操作符后跟Object构造函数:另一种是使用对象字面量表示法.也就是说new Object()等价于{},示例代码如下所示: //使用new操作符后跟Object()方式 var person=n