1、JavaScript3大对象:本地对象(又叫原生对象)
、内置对象、
宿主对象
(1)本地对象:
- 需要通过new来创建所需的实例对象。
- 包含:
Object
、Array
、Date
、RegExp
、Function
、Boolean
、Number
、String
等。
(2)内置对象(不需要NEW , 直接引用——只有MATH GLOBAL)
- 内置对象是本地对象的子集。
- 内置对象总是在引擎初始化阶段就被创建好了;而本地对象包括了一些在运行过程中动态创建的对象。
- ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。
- Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在!在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。
(3)宿主对象
- 何为“宿主对象”? ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。所有非本地对象都是宿主对象。
- 所有的BOM和DOM对象都是宿主对象。
(4)总结
- 本地对象,就是那些官方定义好了的对象。
- 内置对象是本地对象的一种,其只包含Global对象和Math对象。
- 而宿主对象则是那些官方未定义,你自己构建的对象加上DOM和BOM对象组成的。
2、常见的内置对象:Array, String, Date, Math
2.1 内置对象之Array
(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个空间
(2)数组常用的方法
splice方法
(3)遍历数组的方式
2.2 内置对象之Math
(1)创建对象
var num = 15;
var num = new Number(15);
(2)Math常用的方法
- 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.trunc()
去除一个数的小数部分,返回整数部分。对于非数值会内部调用Number方法先将其转为数值。
- Math.sign()
判断一个数是正数、负数、零或者NaN。对于非数值,会将其转换为数值。他会返回五种值:
- 参数为正数,返回+1;
- 参数为负数,返回-1;
- 参数为 0,返回0;
- 参数为-0,返回-0;
- 其他值,返回NaN。
(3)Number的方法
- isFinite() - - 检测是否是有限的数字,即不是Infinity。如果参数不是数字直接返回false。
- isNaN() - - 判断参数是不是NaN。
- parseInt() - - 将字符串转为整数【有容错能力】
- parseFloat() - - 将字符串转为浮点数【有容错能力】
- Number() - - 将字符串转为数字。【无容错能力,遇到不是数字的话就会返回NaN】
- isInteger() - - 用来判断一个数值是否是整数。【如果数字超过了小数点后面的十六个进制则会判断失误因为超过的被遗弃了。或者绝对值小于js能判断的最小值也会失误被转为0】
有容错能力的意思就是允许后面有非数字的内容。会将前面是数字的内容进行转换。无容错能力就是不会转换
2.3 内置对象之String
(1)创建对象
var str = 'abc';
var str = new String('abc');
(2)String常用的方法
- charAt(index) - - 获取index位置处的字符
- indexOf(sub) - - 查找符合条件的第一个字符串所在下标
- lastIndexOf(sub) - - 查找符合条件的第一个字符串所在下标(从后往前查)
- slice(start, end) - - 截取子字符串,不包括下标为end的元素
- concat() - - 字符串连接
- split() - - 切割字符串不传值的话就是直接把字符串用数组包起来,传值就是以值为分割。比如:
- splice(index,n)---删除、插入、替换。index:数组中需要删除数据的起始位置;n:需要删除的元素,数据的个数;可参考:
- replace(oldString, newString) - - 替换
- toUpperCase() - - 转换为大写
- toLowerCase() - - 转换为小写
- subString(start, end) - - 截取子字符串,不包含end
- charCodeAt(index) - - 获取index位置处字符的unicode编码
- String.fromCharCode(code) - - 将unicode编码转换为对应的字符串
- trim() - - 去掉前后空白
- trimStart() - - 去除头部空白
- trimLeft() - - 去除头部空白【trimStart的别名】
- trimEnd() - - 去除尾部空白
- trimRight() - - 去除尾部空白【trimEnd的别名】
- replace(/^\s+|\s+$/g, ‘’) - - 去掉前后空白的兼容写法
- includes(sub) - - 返回布尔值,表示是否找到了参数字符串。
- startsWith(sub) - - 返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith(sub) - - 返回布尔值,表示参数字符串是否在原字符串的尾部。
从下图可以看到这三个方法都会将数据类型进行隐式转换。
2.4 内置对象之Date
(1)创建对象
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;
(2)Date常用的方法
- 获取时间:
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的方法
2.5 内置对象之JSON(ES5新增内置对象)
全称:
JavaScript Object Notation(JavaScript对象表示法)
作用:
用于存储和交换数据的文本格式(XML)
(1)JSON常用的方法
//将JS值转换为JSON文本字符串
JSON.stringify()
//将JSON文本字符串解析为JS值
JSON.parse()
//编码
encodeURIComponent()
//解码
decodeURIComponent()
例1: (JSON.stringify与JSON.parse也可以用来拷贝对象的值,该例子就已经实现了拷贝对象)
例2:编码与解码
3、创建对象的方法
3.1 方式一:直接量(也叫字面量)
var stu = {
//name与age属于静态体征
name: '李四',
age: 13,
//study与eat属于动态行为
study: function(course) {
console.log('学习课程:' + course)
},
eat: function(pig) {
console.log('吃:' + pig)
}
}
3.2 方式二:通过构造函数创建
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指的是调用函数的对象。
3.3 方式三:通过new Object()创建
通过object构造器new一个对象,再丰富对象信息。
var person = new Object();
person.name = 'wuxiaodi';
person.sex = 'boy';
3.4 方式四:工厂方式
注意:不能区分对象的具体类型
function createStudent(name, age) {
let stu = new Object();
stu.name = name;
stu.age = age;
stu.study = function() {
console.log(this.name + " 学习...");
}
return stu;
}