对象
一.对象的四种创建方式
1.系统object创建
var person = new Object();
person.name = 'lisi';
person.age = 35;
person.job = 'actor';
person.sayHi = function(){
console.log('Hello,everyBody');
}
/调用方式
console.log(person.name,person.age,person.job);
person.sayHi();
2.字面量冒号方式
var person = {
name: 'zs',
age: 18,
sex: true,
sayHi: function () {
console.log(this.name);
}
};
///调用方式
console.log(person.name,person.age,person.sex);
person.sayHi();
3.自定义构造方式
自定义构造函数特点:首字母大写,有参数,用this指向属性,最后new一个对象调用
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');//但是可以调用
console.log(p1);
p1.sayHi();
4.工厂模式创建对象
工厂模式创建对象的特点:
有参数,先new一个对象,有return值,有参数
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');
p1.sayHi();
new关键字在执行过程中的四个步骤:
1.开辟空间,存储创建的新的对象
2.把this指向了这个新的对象
3.设置属性和方法的值
4.返回当前的新的对象
this关键字
1.函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2.在普通函数中使用,内部this指向全局window
3.函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
4.构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有的方法和属性都挂载到这个隐式对象身上,后续通过new关键字来调用,从而实现实例化
二,函数中使用对象的三种方式
1.对象在函数里
function getDate() {
var dt=new Date();
var year = dt.getFullYear();
return year;
console.log(getDate());
2.对象在函数外
function getDate() {
var year = dt.getFullYear();
return year + '年' + month + '月' + day + '日' + hour + ":" + second;}
var dt=new Date();
console.log(getDate());
3.对象在函数中当参数
function getDate(dt) { /// /
var year = dt.getFullYear();
return year + '年' + month + '月' + day + '日' + hour + ":" + second;}
console.log(getDate(new Date()));///
三.遍历对象
通过for…in语法可以遍历一个对象key存储的变量名
obj[key]存储的是赋给变量的值
var obj = {};
for (var i = 0; i < 10; i++) {
obj[i] = i * 2;
}
for(var key in obj) {
console.log(key + "==" + obj[key]);
}
删除对象的属性
function fun() {
this.name = 'mm';
}
var obj = new fun();
console.log(obj.name);
//直接用delete删除对象的属性值
delete obj.name;
console.log(obj.name); // undefined
四.内置对象
1.Math
Math.PI
(1)Math.random 生成随机数
如果直接输出Math.random(),出现的是0-1之间的小数
如果想要让它产生多少范围之间的整数,我们则用
parseInt(Math.random()*5)会产生0---4这些整数 parseInt((Math.random()*5)+1)会产生1----5这些整数
(2)Math.floor向下取整
-
eg:-2.3取整为-3
(3)Math.ceil 向上取整
取得比当前数值大的整数 如果是是负数
-
eg: -1.6取整为-1
(4)Math.round 取整 四舍五入
如果是负数,取整,但是是五舍六入
(5)Math.abs 绝对值
(6)Math.max/Math.min 最大值和最小值
(7)Math.sqrt 平方根
2.Date
(1)Date创建方式
-
获取当前时间,UTC世界时间,距1970年1月1日(世界标准时间)起的毫秒数 1.var date = new Date(); //获得计算机的当前时间 console.log(date); 2.通过设置参数,指定date的时间 var date = newDate(2018,10,21,11,11,10); consol.log(date); 3.字符串类型参数传入方式---常用 var date = new date('2015-4-6 12:26:16'); console.log(date);
(2)Date中获取具体时间的方法系列
-
1.getFullYear() //返回4位的年份 比如2012 2.getMonth() //返回月份,从0开始 3.getDate() //返回当前月的第几天 4.getDay() //返回星期几 0---周日 5.getHours() //返回.-23之间的小时数 6.getMinutes() //返回0-59分钟数 7.getSeconds() //返回0-59秒数 8.getMilliseconds() //返回0-999毫秒数 9.getTime() //返回毫秒数和valueOf()结果一样,valueOf()内部调用的getTime()
补充:valueOf()方法
valueOf()方法用于返回给定参数的原生Number对象值,参数可以是原生数据类型,String等
该方法是静态方法,可以接收两个参数,一个是字符串,一个是基数
语法:
该方法有以下几种语法格式:
-
static Integer valueOf(int i) static Integer valueOf(String s) static Integer valueOf(String s, int radix)
参数:
- i – Integer 对象的整数。
s – Integer 对象的字符串。
radix --在解析字符串 s 时使用的基数,用于指定使用的进制数。
返回值:
-
Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。 Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。 Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
实例:
public class Test{
public static void main(String args[]){
Integer x =Integer.valueOf(9);
Double c = Double.valueOf(5);
Float a = Float.valueOf("80");
Integer b = Integer.valueOf("444",16); // 使用 16 进制
System.out.println(x);
System.out.println(c);
System.out.println(a);
System.out.println(b);
}
}
//输出结果:
9
5.0
80.0
1092
(3)将日期转换为毫秒形式
var date = new Date();
console.log(date.getTime())
console.log(date.valueOf())
console.log(Date.now());
console.log(Date.parse('2015-1-1'));
var now = + new Date(); +号是把字符串转换为数值类型
3.String
(1)字符串的特性
a.不可变性:字符串的值是不能改变的(原字符串不可变,但能重新赋值)
b.字符串是可以看成一个数组的,称为字符数组,可以遍历的
(2)字符串对象的常用属性和方法
-
String,length 获得字符串长度 charAt(0-length-1)/str[0] 获取指定位置处字符,超出索引,返回值为空 concat() 拼接字符串,等效于+,+更常用 indexOf() 返回指定内容在原字符串中的位置,有两个参数,第一个参数是要找的字符,第二个参数是开始找的位置 lastindexOf() 从后往前找 replace() 替换,两个参数,第一个参数:原来的字符;第二个参数:要换成的字符串替换.注意:只能替换从左往右找到的第一个满足的字符串 slice() 拷贝字符串,两个参数:第一个参数,开始位置;第二个参数:结束位置(不包含) [补充:substring 与sclice相同,如果只有一个参数的话,就是从该参数指定位置拷贝到最后 ] substring() 截取字符串,两个参数,第一个参数:开始的索引位置;第二个参数:截取的个数 split() 切割字符串,两个参数,第一个参数:要切割的字符串;第二个参数:切割后剩下的个数 返回值:返回分割后的多个部分组成的数组 to(Locale)LowerCase()/toLowerCase() 转成小写 to(Locale)UpperCase()/toUpperCase() 转成大写 trim() 只能去除字符串两端的空白,字符串中间的空格去不掉
4.Array
1.创建数组对象的两种方式:
-
(1)使用构造函数创建数组对象 //创建一个空数组 var arr = new Array(); //创建一个数据,里面放3个字符串 var arr = new Array('zs','zsc','sc'); //创建一个数组,里面放4个数字 var arr = new Array(1,2.3,4);
- (2)使用字面量创建数组对象
var arr = [1,2,3];
//获取数组中元素的个数
console.log(arr.length);
2.检测一个数组是否是数组 -
(1)instanceof
-
(2)Array.isArray() eg:var obj=[]; console.log(Array.isArray(obj));//true
3.数组的四个基本操作方法:
-
push() 从数组最后面加元素 pop() 从数组最后面删元素 shift() 从数组前面删元素 unshift() 从数组前面加元素
4.数组的位置方法:
-
indexOf() 查数组中的某个元素的索引位置,两个参数,第一个参数:要检索的元素值;第二个参数:默认值为0,表示检索的起始位置索引值;返回值:返回从左往右找到的第一个元素的索引值,如果没有查找到对应的元素,返回值为 -1 在ie9以下不支持 lastIndexOf() 从后面开始找,检索顺序与indexOf相反 在ie9以下不支持
排序方法:
-
reverse() 翻转数组,返回值:返回修改后的原数组(与原数组是同一个数组) sort() 对数组进行排序时,如果数组大于9之后,也是按照打一个字符的顺序排序 sort()里面也可以是函数,如果是函数,意思是按照该函数规定的顺序进行排序 参数:升序: function(a,b) {return a-b;} //从小到大 降序: function(a,b){return b-a;} //从大到小
转换方法:
-
toString() 将一个数组转换为字符串类型,返回字符串,形式为将每个元素按照逗号,连接。 join() 可以使用指定的连接符将每个数组元素连接,如果不传参数,默认用逗号,join传空会直接将每个元素进行连接.转成字符串
4.清空数组的三种方法
- (1) arr = []; //推荐
(2) arr.length = 0;
(3) arr.splice(0, arr.length);
五.基本包装类型对象
首先注意一个问题:字符串这种基本数据类型为什么会具有属性(或方法呢)
原因:字符串就是一种基本数据类型值,字符串非常常用,在js开发过程中,会在使用基本数据类型的属性或方法时给我们自动创建一个对象,这种对象称为基本包装类型对象.会使用这个对象的属性和方法,等使用完毕,这个对象被移除.
基本包装对象定义:用于对基本数据类型值进行操作的对象
js执行过程:
var str = 'abcdefg';
var temp = new String(str);
//1 js自动创建了一个同于操作字符串类型值的对象
console.log(temp.length);
//2 根据我们设置的功能,访问这个对象的对应功能
temp = null;
//3 将这个对象清除
这种对象是js操作时使用的,不用自己书写,自己使用会产生歧义
六.undefined使用场景
1.变量声明未赋值,默认为undefined
var a;
console.log(a);
2.数组中 某一项没有值 值是undefined
var arr = [1, 2, 3];
console.log(arr[10]);
3.函数的形参没有接收到对应实参,默认为undefined
function fn(a, b) {
console.log(b);
}
fn(1);
4.函数没有返回值 相当于返回了undefined
console.log(fn(1, 2));
5.对象没有这个属性 非要获取这个属性的值 这个属性的值也是undefined
var obj = {
name: "zs",
age: 18
};
console.log(obj.sex);
//undefined都是解析器给的默认值
//null一般都是程序员主动赋予的值