• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
可爱熊
熊爱可
博客园    首页    新随笔    联系   管理    订阅  订阅

引用类型

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]]  // 随机获取数组值

 

 

 

 

  

  

 

是不是你的耳朵是圆的,我的话是方的,所以你听不进去呀。
posted @ 2018-01-07 16:52  熊小可  阅读(447)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3