跳至主要內容

对象

Emilia Zhen大约 3 分钟js

对象

JavaScript 的对象是无序属性的集合。

对象创建方式

对象字面量

var o = {
  name: 'zs',
  age: 18,
  sex: true,
  sayHi: function () {
    console.log(this.name)
  },
}

new Object()创建对象 不推荐

var person = new Object()
person.name = 'lisi'
person.age = 35
person.job = 'actor'
person.sayHi = function () {
  console.log('Hello,everyBody')
}

工厂函数创建对象 不推荐

function createPerson(name, age, job) {
  var person = new Object()
  person.name = name
  person.age = age
  person.job = job
  person.sayHi = function () {
    console.log('Hello,everyBody')
  }
  return person
}
var p1 = createPerson('张三', 22, 'actor')

自定义构造函数

function Person(name, age, job) {
  this.name = name
  this.age = age
  this.job = job
  this.sayHi = function () {
    console.log('Hello,everyBody')
  }
}
var p1 = new Person('张三', 22, 'actor')

new 关键字的执行过程

  • 在内存中创建对象
  • 将构造函数中的 this 指向了新创建的对象
  • 执行构造函数中的代码,给新创建的对象添加属性和方法
  • 返回新创建的对象

this 的指向

  • 普通函数调用时, this 指向 window
  • 方法调用(函数属于对象)时, this 指向 当前方法所属的对象
  • 构造函数调用时, this 指向 新创建的对象

遍历属性

for in 循环 对象有多少个成员,for in 循环多少次

var o = {
  name: 'zs',
  age: 18,
}
for (var key in o) {
  console.log(key + o[key])
}

删除属性

delete obj.name

数据类型

逻辑内存区域: 堆和栈 栈中存储基本数据类型的数据 堆中存储引用数据类型的数据 基本数据类型 (简单数据类型) 引用数据类型 (复杂数据类型)

  • 基本数据类型作为参数传递到函数中的情况 函数中的形参值改变, 不会影响外面实参的值
    因为基本数据类型存储的就是值本身
  • 引用数据类型作为参数传递到函数中的情况 函数中的形参属性改变, 会影响外面实参的属性值
    因为实参和形参都是指向同一片内存区域(同一个对象)
    实参赋值给形参的过程, 其实是把地址值赋值给了形参

内置对象

JavaScript 中的对象分为 3 种:内置对象、自定义对象、浏览器对象 可以通过 MDN/W3C 来查询,MDNopen in new window

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 对象

方法说明
new Date()当前时间;获取的是 1970 年 1 月 1 日 0:00:00:000 到当前的毫秒值;
getTime()返回毫秒数和 valueOf()结果一样
getMilliseconds()获取当前毫秒, 返回 0 - 999
getSeconds()获取当前秒, 返回 0 - 59
getMinutes()获取当前分, 返回 0 - 59
getHours()获取当前时, 返回 0 - 23
getDay()获取当前周几, 返回星期几 0 表示周日 1 - 6 表示周 1 至周 6
getDate()获取当前几号, 返回当前月的第几天
getMonth()获取当前几月, 返回月份,从 0 开始 0 - 11
getFullYear()获取当前是哪一年, 返回 4 位的年份 如 2016

格式化日期

function gsh(date) {
  if (!(date instanceof Date)) {
    console.error('date 不是一个日期')
    return
  }
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()
  var hours = date.getHours()
  var minutes = date.getMinutes()
  var seconds = date.getSeconds()
  month = month < 10 ? '0' + month : month
  day = day < 10 ? '0' + day : day
  hours = hours < 10 ? '0' + hours : hours
  minutes = minutes < 10 ? '0' + minutes : minutes
  return '现在是北京时间' + year + '年' + month + '月' + day + '日,' + hours + '点' + minutes + '分' + seconds + '秒'
}
var date1 = new Date()
var r = gsh(date1)
console.log(r)

Array 对象

判断一个变量是不是一个数组

  1. 变量 instanceof Array
  2. Array.isArray(变量);

注意

方法 2 有兼容性问题

操作数组元素

添加元素:

push():在末尾添加元素 unshift():在前面添加元素 返回值:添加元素后数组的长度

移除元素:

pop():移除最后一个元素 shift():移除第一个元素 返回值:被移除的元素

操作数组元素位置

翻转数组

arr.reverse()

排序

var r = arr.sort(function (a, b) {
return a - b; //a-b 正序 b-a 倒序
};
console.log(r);