JS的对象就是Object,还有独立于宿主环境的ECMAScript实现提供的内置对象:Array,String,Date,Math。。。
首先我们来学习一下JS的对象:
Object:
JS里有一句话叫万物皆对象(除了基本数据类型)。但是new String(’’)或者new Number()这种不属于基本数据类型,属于引用类型。
对象就是属性的无序集合。数组是有序集合。
创建对象的方法:
直接量(也叫字面量)
属性(对象的静态体征)
方法(对象的动态行为)
一个属性属性名结束后用,逗号隔开。
var stu = {
//name与age属于静态体征
name: '李四',
age: 13,
//study与eat属于动态行为
study: function(course) {
console.log('学习课程:' + course)
},
eat: function(pig) {
console.log('吃:' + pig)
}
}
通过构造函数创建
方法:var person = new 函数名();
通过该方法创建对象时,会自动执行该构造函数。
例如:
//构造函数的函数名首字母大写,区分与普通函数的区别,不是强制规定的,你也可以小写。
function Person(name, sex) {
this.name = name;
this.sex = sex,
this.job = function() {
alert(this.name)
}
}
var child = new Person('Jack', '男');
Person.job();
//此代码一共会两次跳出对话框,因为创建对象时会自动执行构造函数一次。this指的是调用函数的对象。
通过new Object()创建
方法:通过object构造器new一个对象,在丰富对象信息。
var person = new Object();
person.name = 'wuxiaodi';
person.sex = 'boy';
工厂方式
function createStudent(name, age) {
let stu = new Object();
stu.name = name;
stu.age = age;
stu.study = function() {
console.log(this.name + " 学习...");
}
return stu;
}
注意:不能区分对象的具体类型
构造函数 + prototype
prototype: 原型对象
对象共享资源
_proto_:原型属性
prototype:默认每个函数对象都有prototype属性,显式属性
_proto_:默认每个对象都有 _proto_ 属性,该属性默认指向创建对应对象的构造函数中的 prototype,隐式属性
JS中的对象都是基于原型的对象。
对象属性调用:
对象名.属性名
对象名.方法名([参数列表])
或:
对象名[‘属性名’]
对象名[‘方法名’]()
先在自身空间中查找,如果有则直接使用,如果没有,则到原型中查找;如果原型中存在,则调用使用,如果原型中不存在,则继续到原型的原型(原型链)中查找,依此方式继续查找使用,如果一直不存在,会继续向原型链中查找,直到 Object.prototype(原型链终点)中。如果原型链中不存在待调用的属性,则返回 undefined
Object.create()
class 语法糖
…
内置对象之Array:
数组:保存一组数据
数组对象的作用是:使用单独的变量名来存储一系列的值。(动态数组:可自动根据元素个数调用长度大小)
概念:
元素:数组中所保存数据的空间
长度:数组中所保存元素的个数
下标(索引):数组中元素的编号,从0开始编号,到(长度-1)结束
使用:
创建数组对象:
var arr = []; //直接量
var arr = new Array(); //创建数组对象。当数组长度为0的时候括号可以不写。
var arr = [1, 2, 3, 4]; //直接量,在创建数组对象的同时初始化保存的数据
var arr = new Array(1, 2, 3, 4);
var arr = new Array(size); //size为数字参数,表示创建数组时先预定size个空间
访问数组元素:
数组名[下标]
关于数组的变量迭代请看:
数组ES5新增的遍历迭代方法
也可以使用for循环的方式。
关于数组的常用API请看:
数组的常用方法及其使用场景
关于数组排序的算法请看:
JS常见算法小总结
内置对象之Math:
作用: 用来处理数字数据。
定义对象:
var num = 15;
var num = new Number(15);
API:
Math.random()
生成一个0~1之间的随机小数
如果要生成0-54之间的随机整数:
Math.floor(Math.random() * 54)
Math.floor(num)
将num向下取整,取小于等于num的最大整数,
如:
Math.floor(3.1) //3
Math.floor(3.999) //3
Math.ceil(num)
将num向上取整数,取大于等于num的最小整数,
如:
Math.ceil(3.1) //4
Math.ceil(3.999) //4
Math.round(num)
将num四舍五入取整数
Math.pow(x, y)
求 x 的 y 次方
如:
Math.pow(5, 3) //125
Math.sqrt(x)
求x的开方:
如:
Math.sqrt(25) //5
内置对象之String:
作用: 处理文本数据
定义对象:
var str = 'abc';
var str = new String('abc');
API:
属性:length - - 字符串的长度
方法:
charAt(index) - - 获取index位置处的字符
charCodeAt(index) - - 获取index位置处字符的unicode编码
String.fromCharCode(code) - - 将unicode编码转换为对应的字符串
concat() - - 字符串连接
indexOf(sub) - - 查找符合条件的第一个字符串所在下标
lastIndexOf(sub) - - 查找符合条件的第一个字符串所在下标(从后往前查)
slice(start, end) - - 截取子字符串
subString(start, end) - - 截取子字符串
split() - - 切割字符串不传值的话就是直接把字符串用数组包起来,传值就是以值为分割。比如:
请仔细看我传入的值,与最后的结果。
replace(oldString, newString) - - 替换
toUpperCase() - - 转换为大写
toLowerCase() - - 转换为小写
trim() - - 去掉前后空白
replace(/^\s+|\s+$/g, ‘’) - - 去掉前后空白的兼容写法
内置对象之Date:
作用:
创建方法:
let date = new Date(); //系统当前时间
let date = new Date(value); //value是距1970-1-1 0:0:0(UTC)依赖的毫秒值
let date = new Date(dateString); //dateString表示日期时间字符串“yyyy-MM-ddThh:mm:ss”
let date = new Date(year,month[, hour[, minutes[, seconds[, milliseconds]]]]);; //传递日期时间数字。month合理取值为0~11;
API:
获取时间:
getFullYear() //获取四位年份
getMonth() //获取月份,返回值是0~11
getDate() //获取日期
getDay() //获取星期,返回值是0~6
getHours() //获取小时
getMinutes() //获取分钟
getSeconds() //获取秒
getMilliseconds() //获取毫秒
getTime() //获取距 1970-1-1 0:0:0 以来的毫秒值
设置时间:
setFullYear() //设置四位年份
setMonth() //设置月份,传值是0~11
setDate() //设置日期
setHours() //设置小时
setMinutes() //设置分钟
setSeconds() //设置秒
setMilliseconds() //设置毫秒
setTime() //设置距1970-1-1 0:0:0多少毫秒是什么时间(取负值的话就是1970年之前)
时间转换:
Date.parse() //解析,将日期时间字符串转换为表示时间的毫秒值
toString() //将日期时间字符串转换为字符串
toUTCString() //将日期时间转换为世界标准时间的字符串
valueOf() //返回Date对象的原始值。与getTime()一致。
tolSOString() //将日期时间转为格式为 YYYY-MM-DDTHH:mm:ss.sssZ 的字符串
toJSON() //返回 Date 对象的字符串形式。
获取日期时间毫秒值:
new Date.getTime()
Date.parse()
new Date().valueOf()
+new Date() //隐式类型转换的方法
Date.now() //ES5的方法
内置对象之JSON(ES5新增内置对象)
全称:
JavaScript Object Notation(JavaScript对象表示法)
作用:
用于存储和交换数据的文本格式(XML)
API:
//将JS值转换为JSON文本字符串
JSON.stringify()
//将JSON文本字符串解析为JS值
JSON.parse()
//编码
encodeURIComponent()
//解码
decodeURIComponent()
小案例:
JSON.stringify与JSON.parse也可以用来拷贝对象的值,我们上面的小例子就已经实现了拷贝对象。
这个小案例就实现了编码与解码的操作。
注意传入的值要是字符串才可以哦~
|
|