7.1对象概述

第七章 对象 - 图1
image.png
一个对象被赋值给person,在person中保存的其实是对象的内存地址。而不是对象本身,这种赋值被称为“引用”

方法
image.png

7.2自定义对象的属性操作

两种方法读取对象属性:点运算符和方括号运算符

  1. let person = {
  2. name: 'henry',
  3. age: 18
  4. }
  5. console.log(person.name);
  6. console.log(person['name']);

效果一样,但是方括号运算符的方括号中可以是一个变量

  1. let person = {
  2. name: 'henry',
  3. age: 18
  4. }
  5. let variable = 'name';
  6. console.log(person[variable]);
  7. variable = 'age';
  8. console.log(person[variable]);

image.png
属性的赋值和读取一样可以通过运算符和方括号运算符完成

属性查看
查看一个对象本身所有属性,可以使用Object.keys方法
image.png
属性的删除和增加
delete命令
增加直接person.属性名=属性值

7.3遍历对象属性

在对象中查找某个符合条件的属性
用for…in遍历属性

  1. let person = {
  2. name: 'henry',
  3. age: 18,
  4. }
  5. for (var key in person) {
  6. console.log('键名:' + key + ';键值:' + person[key]);
  7. }

借助Object.keys遍历属性

  1. let person = {
  2. name: 'henry',
  3. age: 18,
  4. }
  5. let keys = Object.keys(person);
  6. for (let i = 0; i < keys.length; i++) {
  7. console.log('键名:' + keys[i] + ';键值:' + person[keys[i]]);
  8. }

原型就是对象继承的上一级对象

属性是否存在:in
image.png

自身属性是否存在:hasOwnProperty

  1. let person = {
  2. name: 'henry',
  3. age: 18,
  4. }
  5. person.hasOwnProperty('name');
  6. person.hasOwnProperty('gender');
  7. person.hasOwnProperty('toString');

Object与JSON、Map的区别

JSON格式和JavaScript对象转换
1.JSON.parse():JSON格式=>JavaScript对象

  1. // 一个 JSON 字符串
  2. const jsonStr = '{"sites":[{"name":"Runoob", "url":"www.runoob.com"},{"name":"Google", "url":"www.google.com"},{"name":"Taobao", "url":"www.taobao.com"}]}';
  3. // 转成 JavaScript 对象
  4. const obj = JSON.parse(jsonStr);

2.JSON.stringify():JavaScript对象=>JSON格式

  1. const jsonStr2 = JSON.stringify(obj);

Map
image.png
**

7.5内置对象——Math、Storage

Math对象
常量

  1. Math.E // 常数e。
  2. Math.LN2 // 2 的自然对数。
  3. Math.LN10 // 10 的自然对数。
  4. Math.LOG2E // 以 2 为底的e的对数。
  5. Math.LOG10E // 以 10 为底的e的对数。
  6. Math.PI // 常数π。
  7. Math.SQRT1_2 // 0.5 的平方根。
  8. Math.SQRT2 // 2 的平方根。

静态方法

  1. Math.abs() // 绝对值
  2. Math.ceil() // 向上取整
  3. Math.floor() // 向下取整
  4. Math.round() // 四舍五入取整
  5. Math.max() // 最大值
  6. Math.min() // 最小值
  7. Math.pow() // 指数运算
  8. Math.sqrt() // 平方根
  9. Math.log() // 自然对数
  10. Math.exp() // e的指数
  11. Math.random() // 随机数

Storage对象
Storage接口用于脚本在浏览器保存数据。两个对象部署了这个接口:window.sessionStorage和window.localStorage
**
数据的存入:setItem

  1. window.localStorage.setItem('myLocalStorage', 'storage Value');

image.png
注意,如果要存入的数据不是字符串类型的数据,最好先转换成字符串类型

  1. const obj = {
  2. name: 'henry',
  3. age: 18
  4. }
  5. const value = JSON.stringify(obj);
  6. window.localStorage.setItem('myLocalStorage', value);

读取数据:getItem

  1. window.localStorage.getItem('myLocalStorage');

清除缓存:clear

  1. window.localStorage.clear();

清除所有保存的数据

7.6内置对象——String

包装对象:原生对象可以把原始类型的值变成(包装成)对象

  1. let v2 = new String('abc');

包装对象的最大目的:1.使得JavaScript的对象涵盖所有的值;2.使得原类型的值可以方便地调用某些方法

  1. let len = 'here is an apple'.length

字符串中的空格也是计算在内的

查找字符串:indexOf()

去掉两端空格:trim()**
trim()不会改变原字符串,是复制一份

截取字符串:substring/substr
image.png
image.png
分割字符串:split
也不会改变字符串
image.png

7.7内置对象——Array

连接数组:join()
image.png**

  1. let arr = [1, 2, 3, 4];
  2. arr.join(' ') // '1 2 3 4'
  3. arr.join(' | ') // "1 | 2 | 3 | 4"
  4. arr.join() // "1,2,3,4"

与split方法作用相反

倒叙排列:reverse()

  1. let arr = ['a', 'b', 'c'];
  2. arr.reverse() // ["c", "b", "a"]
  3. arr // ["c", "b", "a"]

改变原数组

排序:sort()
默认是按照字典排序

  1. let arr = [
  2. { name: 'jenny', age: 18 },
  3. { name: 'tom', age: 10 },
  4. { name: 'mary', age: 40 }
  5. ];
  6. arr.sort(function(a, b) {
  7. return a.age - b.age;
  8. });
  9. console.log(arr);

按年龄从小到大

遍历:map/forEach
image.png

  1. let arr = [
  2. { name: 'jenny', age: 18 },
  3. { name: 'tom', age: 10 },
  4. { name: 'mary', age: 40 }
  5. ];
  6. // elem: 数组成员
  7. // index: 成员下标
  8. // a: 整个数组
  9. const handledArr = arr.map(function(elem, index, a) {
  10. elem.age += 1;
  11. console.log(elem, index, a);
  12. return elem.name
  13. });
  14. console.log(arr);
  15. console.log(handledArr);

forEach的用法和map基本一致,不过forEach
image.png

7.8内置对象——Date

获取当前时间:new Date()

  1. let now = new Date();
  2. console.log(now);

**
特定的时间对象

  1. // 传入表示“年月日时分秒”的数字
  2. let dt1 = new Date(2020, 0, 6, 0, 0, 0);
  3. console.log(dt1);
  4. // 传入日期字符串
  5. let dt2 = new Date('2020-1-6');
  6. console.log(dt2);
  7. // 传入距离国际标准时间的毫秒数
  8. let dt3 = new Date(1578240000000);
  9. console.log(dt3);


日期运算
image.png**

  1. let dt1 = new Date(2020, 2, 1);
  2. let dt2 = new Date(2020, 3, 1);
  3. console.log(dt1 > dt2); // false
  4. console.log(dt1 < dt2); // true


早晚比较:大于小于符号

解析日期字符串:Date.parse()

时间对象转时间字符串:to 方法**
toJSON()

  1. let dt = new Date();
  2. let dtStr = dt.toJSON();
  3. console.log(dtStr); // 2020-01-03T09:44:18.220Z


获取对象的年/月/日:get方法**

  1. let dt = new Date();
  2. dt.getTime(); // 返回实例距离1970年1月1日00:00:00的毫秒数。
  3. dt.getDate(); // 返回实例对象对应每个月的几号(从1开始)。
  4. dt.getDay(); // 返回星期几,星期日为0,星期一为1,以此类推。
  5. dt.getFullYear(); // 返回四位的年份。
  6. dt.getMonth(); // 返回月份(0表示1月,11表示12月)。
  7. dt.getHours(); // 返回小时(0-23)。
  8. dt.getMilliseconds(); // 返回毫秒(0-999)。
  9. dt.getMinutes(); // 返回分钟(0-59)。
  10. dt.getSeconds(); // 返回秒(0-59)。


image.png
设置时间对象的年/月/日:set方法**

  1. let dt = new Date();
  2. dt.setTime(ms); // 设置实例距离1970年1月1日00:00:00的毫秒数。
  3. dt.setDate(date); // 设置实例对象对应每个月的几号(从1开始)。
  4. dt.setFullYear(year); // 设置四位的年份。
  5. dt.setMonth(month); // 设置月份(0表示1月,11表示12月)。
  6. dt.setHours(hour); // 设置小时(0-23)。
  7. dt.setMilliseconds(ms); // 设置毫秒(0-999)。
  8. dt.setMinutes(min); // 设置分钟(0-59)。
  9. dt.setSeconds(sec); // 设置秒(0-59)。

小结
**第七章 对象 - 图17

sort排序-1和1的区别
https://blog.csdn.net/u014732824/article/details/90897747

  1. var array = [4,8,128,1,64,2,16,32];
  2. array = array.sort(compare);
  3. function compare(value1, value2){
  4. if(value1 < value2){
  5. return -1;
  6. }else if(value1 > value2){
  7. return 1;
  8. }else{
  9. return 0;
  10. }
  11. }

等价于

  1. array = array.sort(function(value1, value2){
  2. return value1 < value2 ? -1 : 1;
  3. });



**