对象
大约 3 分钟
对象
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 来查询,MDN
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 对象
判断一个变量是不是一个数组
- 变量 instanceof Array
- 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);
