JavaScript对象

遍历对象的属性

通过for…in语法可以遍历一个对象
for(var key in 对象名) {
console.log(key + “==” + 对象名.key);
}

删除对象的属性

function fun() { 
  this.name = 'mm';
}
var obj = new fun(); 
console.log(obj.name); // mm 
delete obj.name;
console.log(obj.name); // undefined

简单类型和复杂类型的区别

堆栈空间分配区别:
  1、栈(操作系统)简单类型:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统)复杂类型: 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
  • 注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来讲解,目的方便理解和方便以后的学习。

内置对象

JavaScript中的对象分为3种:内置对象、浏览器对象、自定义对象
JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean…
对象只是带有属性方法的特殊数据类型。
学习一个内置对象的使用,只要学会其常用的成员的使用(通过查文档学习)

可以通过MDN/W3C来查询
内置对象的方法很多,我们只需要知道内置对象提供的常用方法,使用的时候查询文档。

MDN

Mozilla 开发者网络(MDN)提供有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。

如何学习一个方法?

  1. 方法的功能
  2. 参数的意义和类型
  3. 返回值意义和类型
  4. demo进行测试

Math对象

Math.PI // 圆周率
Math.random() // 生成随机数
Math.floor()/Math.ceil() // 向下取整/向上取整
Math.round() // 取整,四舍五入
Math.abs() // 绝对值
Math.max()/Math.min() // 求最大和最小值
Math.sin()/Math.cos() // 正弦/余弦
Math.power()/Math.sqrt() // 求指数次幂/求平方根

Date对象

创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
// 获取当前时间,UTC世界时间,距1970年1月1日(世界标准时间)起的毫秒数
var now = new Date();
console.log(now.valueOf()); // 获取距1970年1月1日(世界标准时间)起的毫秒数

  • 日期格式化方法
toString()		// 转换成字符串
valueOf()		// 获取毫秒值
  • 获取日期指定部分
getTime()  	  // 返回毫秒数和valueOf()结果一样,valueOf()内部调用的getTime()
getMilliseconds() 
getSeconds()  // 返回0-59
getMinutes()  // 返回0-59
getHours()    // 返回0-23
getDay()      // 返回星期几 0周日   6周6
getDate()     // 返回当前月的第几天
getMonth()    // 返回月份,***从0开始***
getFullYear() //返回4位的年份  如 2016

Array对象

  • 创建数组对象的两种方式
// 1. 使用构造函数创建数组对象
// 创建了一个空数组
var arr = new Array();

// 2. 使用字面量创建数组对象
var arr = [1, 2, 3];
  • 数组常用方法
// 1 栈操作(先进后出)
push()   //向数组元素的最后面插入()里面的
pop() 		//取出数组中的最后一项,修改length属性
// 2 队列操作(先进先出)
shift()		//取出数组中的第一个元素,修改length属性
unshift() 	//在数组最前面插入项,返回数组的长度

// 3 排序方法
reverse()	//翻转数组
    数组名.sort(function compare(a, b) {
      return a - b;
    })  //从小到大排序
     数组名.sort(function (a, b) {
      return a.length - b.length;
    }); //字符串里的个数从小到大排序

// 4 操作方法
concat() //把参数拼接到当前数组
slice() 	//从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
splice()	//第一个参数,是从什么位置开始删除 索引。第二个参数,删除多少个元素

// 5 位置方法
indexOf()从前往后找元素、lastIndexOf()从后往前找   
//indexOf的第二个参数 设置indexOf查找的开始位置。如果没找到返回-1,找到返回括号里的元素所在的位置。


例子: 找到数组中每一个a出现的位置,并且把所有a换成b
    var arr = ['c', 'a', 'z', 'a', 'x', 'a'];
    var index = -1;
    do {
      index = arr.indexOf('a', index + 1);

      if (index !== -1) {
        console.log(index);
        arr = arr.replace('a','b');
      }
    } while (index !== -1);

// 6 迭代方法 不会修改原数组(可选)
every()、filter()、forEach()、map()、some()

    var newArray = arr.filter(function (item) {
      // item就是数组中的每一个元素 (item仅仅是一个名字,可变),来筛选
      return item < 2000;
    })

// 7 方法将数组的所有元素连接到一个字符串中。
join()
  • 清空数组
// 方式1 推荐 
arr = [];
// 方式2 
arr.length = 0;
// 方式3
arr.splice(0, arr.length);

例子: 编写一个方法去掉一个数组的重复元素

    // 编写一个方法去掉一个数组的重复元素['c', 'a', 'z', 'a', 'x', 'a']
    // ['c', 'a', 'z', 'a', 'x', 'a']  -> ['c', 'a', 'z', 'x']
    // 
    // 1 如何获取数组中每一个元素出现的次数
    // 1.1 遍历数组中的每一个元素
    // { c: 1
    // a: 1 + 1 + 1
    // z: 1
    // x: 1 }
    // 1.2 创建一个对象,把数组的元素作为对象的属性,并记录次数
    // 
    // var o = {};
    // console.log(o['c']);  // 我们访问对象中没有的属性,返回值是undefined
    function clear(arr) {
      // 1 如何获取数组中每一个元素出现的次数
      var o = {}; // 记录数组中元素出现的次数
      for (var i = 0; i < arr.length; i++) {
        var item = arr[i]; // 数组中的每一个元素
        // o[item] = 1;
        // 判断o对象是否有当前遍历到的属性
        if (o[item]) {
          // 如果o[item] 存在,说明次数不为1
          o[item]++;
        } else {
          // 如果o[item] 不存在,说明是第一次出现
          o[item] = 1;
        }
      }
      // console.log(o);

      // 2 生成一个新的数组,存储不重复的元素
      var newArray = [];
      // 遍历对象o中的所有属性
      for (var key in o) {
        // 判断o对象中当前属性的值是否为 1  如果为1 说明不重复直接放到新数组中
        if (o[key] === 1) {
          newArray.push(key);
        } else {
          // o对象中当前属性 次数不为1 ,说明有重复的,如果有重复的话,只存储一次
          // 判断当前的newArray数组中是否已经有该元素  
          if (newArray.indexOf(key) === -1) {
            newArray.push(key);
          }
        }
      }
      return newArray;
    } 

    var array = ['c', 'a', 'z', 'a', 'x', 'a'];
    var newArray = clear(array);
    console.log(newArray);

String对象

  • 字符串的不可变
var str = 'abc';
str = 'hello';
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题,速度可能会比较慢
  • 创建字符串对象
var str = new String('Hello World');
  • 字符串对象的常用方法
    字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
// 1 字符方法
charAt(x)    	//获取指定位置(x+1)处的字符
charCodeAt()  	//获取指定位置处字符的ASCII码
str[0]   		//str是字符串的名称,HTML5,IE8+支持 和charAt()等效

// 2 字符串操作方法
substr()   		//第一个参数,截取的开始位置。第二个参数,截取的长度。
slice()      substring() 

// 3 位置方法
indexOf()   	//返回指定内容在元字符串中的位置
lastIndexOf() 	//从后往前找,只找第一个匹配的

// 4 去除空白   
trim()  		//只能去除字符串前后的空白,如果中间也有空格,可以:**replace()把字符串中的空格换成空字符串,或者使用split()简化**

// 5 大小写转换方法
toUpperCase() 	//转换大写
toLowerCase() 	//转换小写

// 6 其它
search()  比indexOf() 强大很多,可以支持正则表达式
replace() 只可以替换第一个找到的元素,可以循环把所有的替换
split()   切割字符串
// String.fromCharCode(101, 102, 103);	 //把ASCII码转换成字符串

案例

replace()替换,或者使用split()简化。
1.把字符串中的所有空白去掉:

例子:把字符串中的所有空白去掉:
     var s = '   abc       xyz  a    123   ';   
     var arr = s.split(' ');
     console.log(arr.join(''));
     //把split(' ')里面的空格  换成 join('')里面的空字符串即可。
     //用replace()同理下面的例子, 只是a换成b 变成了 空格换成空字符


例子: 找到数组中每一个a出现的位置,并且把所有a换成b
    var arr = ['c', 'a', 'z', 'a', 'x', 'a'];
    var index = -1;
    do {
      index = arr.indexOf('a', index + 1);

      if (index !== -1) {
        console.log(index);
        arr = arr.replace('a','b');
      }
    } while (index !== -1);
  1. 判断一个字符串中出现次数最多的字符,统计这个次数:

    // 此字符出现的次数  和  出现次数最多的字符
		
    // 1 统计每一个字符出现的次数
    var s = 'abcoefoxyozzopp';
    var ch;		// 此字符出现的次数
    var num;	// 记录字符串中每一个字符出现的次数
    var o = {};  //创建一个对象,字符作为其属性
    for (var i = 0; i < s.length; i++) {
      var item = s.charAt(i);
      if (o[item]) {
        o[item]++;// 已经有该属性,+1
      } else {
        o[item] = 1;// 对象中没有该属性
      }
    }
		console.log(o);

     // 2 求最大值 并且找到次数最多的字符
     num = 1;    // 假设最大值是1
     for (var key in o) {   //循环遍历对象里的每个字符key
       if (num < o[key]) {
         num = o[key];    // 最多的次数
         ch = key;    // 次数最多的字符
       }
     }
     console.log(num);
     console.log(ch);

3.获取url中参数

    // 获取url中?后面的内容。
    var url = 'http://www.itheima.com/login?name=zs&age=18&a=1&b=2';

    //最终想要的形式:
    // {
    //   name: 'zs',
    //   age: 18
    // }
    
    // 获取url后面的参数
    function getParams(url) {
      // 获取? 后面第一个字符的索引
      var index = url.indexOf('?') + 1;
      // url中?后面的字符串 name=zs&age=18&a=1&b=2
      var params = url.substr(index);
      // 使用& 切割字符串 ,返回一个数组
      var arr = params.split('&');
      console.log(arr); //值为["name=zs", "age=18", "a=1", "b=2"]

      //创建一个对象
      var o = {};
      for (var i = 0; i < arr.length; i++) {
        var tmpArr = arr[i].split('=');
        console.log(tmpArr);//值为["name", "zs"]以及后面的三个

        var key = tmpArr[0];
        var value = tmpArr[1];

        o[key] = value;
      }
      return o;
    }

    //用obj接收函数返回的对象o
    var obj = getParams(url);
    console.log(obj);//值为{name: "zs", age: "18", a: "1", b: "2"}

    console.log(obj.name);
    console.log(obj.age);
    ```
posted @ 2019-04-27 18:13  neverthelessing  阅读(44)  评论(0)    收藏  举报