引用类型

2018-06-24 01:13:31来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1. Object类型

  创建对象的方式

  1) 构造函数方式   var obj = new Object();   // Object为构造函数

  2)字面量方式  var obj = {}

2. Array类型

    ECMAscript数组的每一项可以保存任何类型的数据

  创建数组的方式

  1)var color = new Array();

  如果预先知道数组要保存的项目数量,可以给构造函数传递改数量,该数量会自动变成length属性的值

  var arr = new Array(20);

  也可以向构造函数中传递数组中应该包含的项

  var arr = new Array('xhk', 'coco', 'lover');

  如果给构造函数传递一个值

  这个值是数字, 创建包含给定项数的数组,

  这个值是其他类型参数,创建包含这个值只有一项的数组

  使用Array构造函数的时候可以省略new操作符

  var arr = Array(3);

  2) 数组字面量 var arr = [];

  检测数组

  instanceof Array

  栈方法(后进先出)

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

  pop(): 从数组末尾移除最后一项,减少数组的长度,并返回被移除的项。

  队列方法(先进先出)

  队列在列表的末端添加项,从列表的前端移除项。

  shift(): 从数组前端移除项,并返回该项。

  unshift(): 在数组前端添加任意个项并返回新数组的长度。

  

  重排序方法:reverse()  sort()

  reverse(): 反转数组项的顺序, 返回重新排序后的数组。

  sort(): 默认按升序排列数组项,小到大,为了实现排序sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,以确定如何排序,即使数组中的每一   项都是数值,sort()方法比较的也是字符串。返回重新排序后的数组。

  var arr = [0, 1, 5, 15, 20];  // [0, 1, 15, 20, 5]

  操作方法

  concat(): 先创建一个当前数组的副本,然后将接收到的参数追加到这个副本的末尾,返回新构建的数组。如果传递给concat()方法的是一个或多个数组,该方法会将这   些数组中的每一项都添加到结果数组中。原数组不变。

  slice(): 基于当前数组的一个或多个项创建一个新数组。接受一个或两个参数,参数一:返回项的起始位置;参数二:返回项的结束位置;

  不会影响原始数组

  如果只有一个参数,则返回从该参数指定位置到数组末尾的所有项。

  如果两个参数,返回起始和结束位置之间的项, 不包含结束位置的项。

  如果slice()方法的参数中有一个是负数,则用数组长度加上该数来确定相应的位置,eg: arr.length = 5; slice(-2, -1); 实际上应该返回slice(3, 4)这一段新数组;

  splice(): 向数组中部插入项。返回包含从原始数组中删除的项。如果没有删除任何项,则返回一个空数组。

  1)删除:删除任意数量的项:返回被删除的项;两个参数,参数一,要删除的第一项的位置,参数二,要删除的项数。

  2)插入:指定位置插入任意数量的项,参数一,起始位置;参数二,0(要删除的项数);参数三,要插入的项

  3) 替换:向指定位置插入任意数量的项,且同时删除任意数量的项。参数一,起始位置;参数二,要删除的项数;参数三,要插入的任意数量项。

  位置方法

  indexOf(): 参数:参数一,要查找的项,参数二,(可选)表示查找起点位置的索引;从数组的二开头向后开始查找, 返回查找的项在数组中的位置

  lastIndexOf():参数:参数一,要查找的项,参数二,(可选)表示查找起点位置的索引;从数组的末尾开始向前查找,返回查找的项在数组中的位置

  迭代方法

  每个方法都接受两个参数,参数一,在每一项上运行的函数,参数二,(可选),运行该函数的作用域对象——影响this的值

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

  filter(): 对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组;查询符合某些条件的所有数组项有用。

  forEach(): 对数组中的每一项运行给定的函数,没有返回值。
  map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。适合创建包含的项与另一个数组一一对应的数组。

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

  归并方法

  都是两个参数,参数一,在每一项上调用的函数;参数二,(可选),作为归并基础的初始值。第一次迭代发生在数组的第二项。

  reduce(), reduceRight():接受四个参数,参数一,前一个值;参数二,当前值;参数三,项的索引;参数四,数组对象。函数返回的任何值都会作为第一个参数传  给下一项。

  reduce():从数组的第一项开始,逐项遍历到最后,

  reduceRight():从数组的第一项开始,逐个遍历到最后。

 

  Date类型

  var date = new Date();

  Date.parse():根据字符串参数返回相应的日期毫秒数;

  Date.now(): 返回调用这个函数时的日期和时间的毫秒数;

  var start = +new Date();   // 使用+操作符获取Date对象的时间戳;

 

  RegExp类型

  var pattern = new RegExp('匹配的字符串模式', '可选的标志字符串');

  

  RegExp实例方法

  exec(要应用模式的字符串):专门为捕获而设计,返回包含第一个匹配项信息的数组,没有匹配项的情况下返回null;

  test(字符串参数):在模式与改参数匹配的情况下返回true,否则返回false。是否匹配,不需要知道内容的情况下使用。

 

  Function类型

  由于函数是一个对象,所以函数名是一个指向函数对象的指针;

  函数名只是指向函数的指针;

  使用不带圆括号的函数名只是访问函数指针,不是调用函数;

 

  ECMAScript中没有函数重载的概念

  解析器在向执行环境加载数据的时候,对函数声明和函数表达式并非一视同仁,解析器会率先解析函数声明,使其在执行任何代码之前可用。函数表达式,必须等解   析器执行到他所在的代码行,才会被真正的解析执行。

  根据某个对象属性对数组进行排序

  function compareProperty(propertyName) {
    return function(obj1, obj2) {
      var val1 = obj1[propertyName];
      var val2 = obj2[propertyName];
      if(val1 < val2) {
        return -1;
      } else if (val1 > val2) {
        return 1;
      } else {
        return 0;
      }
    }
  }

  vra data = [{name: 'xhk', age: 35}, {name: 'coco', age: 23}];

  data.sort(compareProperty('age'));

 

  函数内部属性  arguments, this

  arguments: 一个类数组对象,包含传入函数中的所有参数;主要用途有: 1)保存函数参数,arguments对象上有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数。

  function factorial (num) {
    if(num <= 1) {
      return 1;

    } else {
      return num * factorial(num -1);
    }
  }

  factorial(5)      // 120

  如果函数有名字,并且以后函数名字不会变的情况下,这样写没有问题,但是这样写函数的执行和函数名紧紧的耦合在一起,使用arguments.callee;

  function factorial (num) {
    if(num <= 1) {
      return 1;

    } else {
      return num *arguments.callee(num -1);
    }
  }

  factorial(5)      // 120

   this: this引用的是函数执行的环境对象,全局对象是window。

  函数名只是一个包含指针的变量,即使在不同的环境下也是调用同一个函数。

  函数的属性和方法

  每个函数都有两个属性length(表示函数希望接收的命名参数的个数), prototype()

  function xhk(coco, lover) {
    return;
  }

  xhk.length  // 2

  每个函数都包含两个非继承而来的方法(扩充函数赖以运行的作用域)

  apply(): 在特定的作用域中调用函数,相当于设置函数体内this对象的值。两个参数,参数一,在其中运行函数的作用域;参数二,参数数组(可以使Array实例也可以是arguments)

  function callaSum2 (num1, num2) {
    return sum.apply(this, [num1, num2]);
  }

  function callaSum1 (num1, num2) {
    return sum.apply(this, arguments);
  }

  call(): 在特定的作用域中调用函数,相当于设置函数体内this对象的值。参数一this, 参数二数组(必须逐个列出来)

  function callaSum3 (num1, num2) {
    return sum.apply(this, num1, num2);
  }

  bind(): 创建一个函数的实例,this值绑定到传给bind的值;

  var color = 'red';
  var o = {
    color: 'blue'
  }

  function sayColor() {
    return this.color;
  }

  var _color = sayColor.bind(o);

  _color();    // blue

  

  基本包装类型

  3个特殊的引用类型: Boolean, Number, String

  每当读取一个基本类型的值时, 后台会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

  在读取模式中访问字符串的时候,后台自动完成下列处理:

  1)创建基本类型的一个实例;

  2)在实例上调用指定的方法;

  3)销毁这个实例;

  eg. var s1 = new String('xhk');

    var s2 = s1.substring(2);

    s2 = null;

  引用类型和基本包装类型的主要区别在于对象的生存期。

  使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前一直保存在内存中;自动创建的基本包装类型的对象,只存在于一行代码执行的瞬间,然后立   即销毁。所以我们不能在运行时为基本类型添加属性和方法

  Boolean类型

  所有基本包装类型的对象在转换为布尔类型时值始终为true.

  Number类型

  toFixed(): 按照指定的小数位数返回数值的字符串表示;

  var num = 10;

  num.toFixed(3);   // 10.000

  如果数值本身包含的小数位多于指定的位数,接近最大小数位的值会四舍五入

  var num = 10.1219;

  num.toFixed(3);  // 10.122

  toFixed()标准实现的范围是0~20位小数

  toExponential(): 返回指数表示法(e的表示法)

  num.toExponential(2);    // 1.01e+1  参数表示小数位数

  toPrecision(): 得到表示某个数值最合适的格式

  num.toPrecision()     // 10.1219  参数表示数值的所有数值的位数(不包括指数部分)

  num.toPrecision(3)   // 10.1

     String类型

  每一个String实例都包含length属性,表示字符串中包含多少个字符;

   var str = 'xhk coco';

  str.length;   // 8

   用于访问字符串中特定字符的方法

  charAt(): 以单字符字符串的形式返回给定位置的字符

  var str = 'xhk coco';

  str.charAt(2);    // 'k'

  charCodeAt(): 返回指定位置的字符编码

  str.charCodeAt(2);  // 107

   str[0];  // 'x'

 

  concat()将一个或多个字符串拼接起来,返回拼接得到的新字符串;接收任意多个参数

   var str = 'xhk';

  var _str = str.concat('coco'); 

  _str;  // 'xhkcoco'

  str; // 'xhk'

  var _str = str.concat('lover', 'coco', 'more and more');

  _str    // xhklovercocomore and more

  下面三个方法返回被操作字符串的一个子字符串(对原始字符串没有影响):

   slice(开始位置, 得到子字符串的后一个位置): 

  substr(开始位置, 返回的字符串个数)

  substring(开始位置, 得到子字符串的后一个位置)

  var str = 'xhk love coco';

  str.slice(3); // ' love coco';

  str.substr(3); // ' love coco';

  str.substring(3); // ' love coco';

  str.slice(3, 6); // ' lo'

  str.substr(3, 6) ; // ' love '

  str.substring(3, 6); // ' lo'

   以上三个方法的参数有负值的时候

  slice()会将传入的负值与字符串长度相加

  substr()将负的第一个参数加上字符串长度, 负的第二个参数转换为0;

  substring()将所有负值参数都转换为0;

  var str = 'xhk love coco';

  str.slice(-3);  // -3 + 13 = 10;  'oco'

  str.substring(-3);  // 负数转换为0 'xhk love coco'

  str.substr(-3);   // -3 + 13 = 10;  'oco'

  str.slice(3, -4);  // str.slice(3, 9);  " love "

  str.substring(3, -4);  // str.substring(3, 0)由于这个方法会将较小的数字作为开始位置,实际上是str.substring(0, 3)  'xhk'

  str.substr(3, -4);  // str.substr(3, 0);  '' 第二个参数是0所以获取0个字符 是空字符串

 

   字符串位置的方法

  从一个字符串中搜索指定的字符串,方法如下:

  indexOf(): 返回字符串的位置,没有找到该字符串返回-1。从前向后搜索。参数一,要查找的字符串, 参数二, 从字符串的哪个位置开始向后搜索。

  lastIndexOf():返回字符串的位置,没有找到该字符串返回-1。从后向前搜索。参数一,要查找的字符串, 参数二, 从字符串的哪个位置开始向前搜索。

   var str = 'xhk love coco';

  str.indexOf('o');  // 5

  str.lastIndexOf('o'); // 12

  str.indexOf('o', 5); // 10

  str.lastIndexOf('o', 7); // 5

  找到所有匹配的字符串的位置

  var arr = [];

  var pos = str.index('o');

  while(pos > -1) {
    arr.push(pos);

    pos = str.index('o', pos + 1);
  }

  arr    // [5, 10, 12]

 

  trim(): 去掉两端空格,然后返回结果。原字符串保持不变。

  var str = '  xhk  ';

  var val = str.trim();

  val    // 'xhk'

  非标准的方法:

  trimLeft(): 去除前端空格

  trimRight():去除后端空格

  str.trimLeft();    // 'xhk   '

  str.trimRight();    // '   xhk'

  toUpperCase() : 转换为大写

     str.toUpperCase();    // '  XHK   '

  str.toLocaleUpperCase();   // " XHK "

  var str = 'COCO';

  str.toLowerCase();  // 'coco'

  str.toLocaleLowerCase(); // 'coco'

  字符串模式匹配方法

  str.match(): 参数: 正则表达式或者一个RegExp对象

  str.search(): 参数: 正则表达式或者一个RegExp对象,返回字符串中第一个匹配项的索引,如果没有找到匹配项返回-1。始终从字符串开头向后查找。

  str.replace(); 参数一,RegExp对象或一个字符串;参数二,一个字符串或一个函数;

  var txt = 'cat, bat, sat, fat';

  txt.replace('at', 'ond');  // "cond, bat, sat, fat"

  txt.replace(/at/g, 'ond');  // "cond, bond, sond, fond"

  var vals = txt.replace(/(.at)/g, 'word($1)');   // "word(cat), word(bat), word(sat), word(fat)"

  str.split(); 参数一,字符串或RegExp对象(分割符),参数二,指定数组的大小,确保返回的数组不会超过既定大小。

  var colorTxt = 'red, blue, green, yellow';

  var color = colorTxt.split(',', 2);   //  ["red", " blue"]

  fromCharCode():接收一个或多个字符编码,并将他们转换成字符串。

  String.fromCharCode(104, 101)  // he

  内置对象:不依赖宿主环境,不需要显示实例化。内置对象:

  Object、Array、String、Global、Math

  Math.min():获取一组值中的最小值、

  Math.max():获取一组值中的最大值

  var minNum = Math.min(0, 6, 4, 9, 2);  // 0

  var maxNum = Math.max(0, 6, 4, 9, 2);  // 9

  var minNum = Math.min.apply(Math, arr); // 0

  var minNum = Math.min.call(Math, 0, 6, 4, 9, 2);  // 0

  Math.ceil(): 向上取整

  Math.floor(): 向下取整

  Math.round(): 四舍五入

  Math.ceil(1.9);  // 2

  Math.floor(1.9); // 1

  Math.round(1.9); // 2

  Math.random(): 返回大于等于0小于1的随机数

  从某个整数范围随机选择一个数

  值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

  function selectForm(lowerValues, upperValues) {
    var choices = upperValues - lowerValues + 1;
    return Math.floor(Math.random() * choices + lowerValues);
  }

  var colors = ['red', 'green', 'blue', 'yellow', 'grap'];

  var color = colors[selectForm[0, colors.length -1]]  // 随机获取数组值

 

 

 

 

  

  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:三维GIS-室内寻径功能实现

下一篇:关于npm警告fsevents和vue-cli项目中的一些问题,持续更新