对象
this指向
this最终代表的是函数的执行者,最终指向一个对象。(决定this值的是调用方式。)
-
全局执行环境中的this指的是window。
window对象是最顶层的对象,它对应的是全局执行环境。在全局中定义的变量和函数都是作为window对象的属性和方法。
在JavaScript当中window对象有两个功能:
- window对象是最顶层的对象。
- window对象在BOM中是操作浏览器的接口。
-
如果函数是光秃秃(只是函数名进行调用前面没有任何东西)的,调用this指向的是window。
-
通过对象的方法调用,this指向这个对象。
apply、call方法
每个函数对象都有call
和apply
这两个方法。
本质就是设置函数体内的this对象的值
格式:
call(thisArg,arg1,arg2)
apply(thisArg,[argsArray])
两者的工作方式完全相同,不同之处在于传递给调用函数的参数的传递形式。
作用:
-
借用其他函数的方法,让本对象使用。
var obj = { name : 'sex', say:function(){ console.log(this); console.log(this.name); } } obj.say(); var obj1 = { name:'hello' } obj.say.call(obj1);//{name:'hello'}
-
让其他构造函数中的属性变成自己的。
function Demo(name){ this.name = name; } var obj = {sex:'nan',age:18}; // Demo.apply(obj,['wl']); Demo.call(obj,'wl');//执行Demo函数,Demo中的this指向了obj,那么当运行this.name时 就相当于obj.name了。 所以运行完成之后新增了属性。 console.log(obj);
new运算符的流程
new运算符
内部的执行过程。
过程:
- 创建一个对象,开辟内存空间(堆)
- 设置原型链
- this指向该内存(让函数内部的this指向对象。)
- 执行函数代码。
- 将创建的对象实例返回。
基本类型、引用类型判断类型
-
基本数据类型判断:typeof
- undefined
- boolean
- string
- number
- object(null和对象)
- function(函数)
-
其他的对象只能使用
instanceof
格式:
对象 instanceof 类型
-
判断是否是同一个对象(是不是同一个内存地址),使用
==
=
是赋值、两个==
是判断,是否等于(对于对象判断是不是同一个地址)、三个等于判断是不是全等于。
JSON
JSON是一个内置的对象,不用定义能够直接使用。
大写的JSON表示的是JS中的内置对象,小写的json表示的是一种数据格式。
-
json是一种数据格式,现在的前后端交互都是使用json数据格式。
-
json本质上是字符串,简称json串
前端往后端传递数据时,要传json格式的数据。 后端返回给前端的数据也是json格式的数据。
json的值
-
简单值:字符串、数字、布尔值、null。
JavaScript和json字符串最大的区别在于json字符串必须使用__双引号__。
-
对象:无序的键值对儿
属性也是字符串 所以也得加上引号。
-
数组:有序的键值对儿
我们通常会将数组和对象结合起来使用,形成复杂的数据集合。
json数据处理
JSON.stringify(值)
,将JavaScript的值转换为json字符串(用来向后端发送数据时转换为json数据)。- JSON.stringify()输出的JSON字符串不包含空格和缩进。
- 在进行转换时,对于JavaScript对象,所有的函数、原型成员的值,以及值为undefined的任何属性都会被忽略。
JSON.parse(值)
,将JSON字符串解析成为JavaScript值。(用来将从后端得到的数据转换为javascript代码)
Math
ECMAScript为数学计算提供了全局的内置对象,即Math对象。
-
将小数转换为整数,如果是整数则不改变。
Math.ceil()
,进一取整。Math.floor()
,舍一取整。Math.round()
,执行标准的四舍五入。
-
进行数学计算
Math.min()
,获得最小值。Math.max()
,获得最大值。Math.abs()
,求绝对值。Math.pow(num,次方)
,进行幂运算。Math.PI
,圆周率,这是一个属性。Math.random()
,返回大于等于0小于1的一个随机数。
案例:验证码
//验证码 随机的 3~4位的比较多。
//1. 所有的随机字符都是从这个字符串里面挑出来的。
var str = 'abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
var code = '';
for (var i = 0; i < 4; i++) {
code += str[Math.floor(Math.random() * (str.length - 1) + 0)];
}
console.log(code);
Date
Date是javaScript提供的构造函数
。它用来处理日期、时间。
时间戳
- 是一个整数,用来计算的。
- 从1970年1月1日(计算机的元年)0点0分0秒~现在的毫秒数。
时间处理方法
Date既是函数(可运行的代码),又是对象(其中包含属性和方法)
Date.now()
,获得当前的时间戳。
当做构造函数来使用:
格式:new Date()
new Date
不写参数的话,直接获得当前的日期的对象。
传入参数需要获得指定日期的对象:
格式:new Date(年,月[,日[,时[,分[,秒]]]])
([]中的代表选填值)
getFullYear()
,获得4位的年份。setFullYear()
,设置年份(传入的值是4位的数字);getMonth()
,获得日期的月份。 返回日期中的月份,其中0表示一月,11表示12月份。setMonth()
,设置日期的月份。getDate()
,返回天数。(1~31)setDate()
,设置,如果超过了本月应有的天数那么增加月份。getDay()
,获得星期几(0表示星期日,6表示星期六);getHours()
,获得小时。setHours()
,设置小时,传入的值超过了23则增加天数。getMinutes()
,获得分钟数。setMinutes()
,设置分钟数。如果超过59增加小时getSeconds()
,返回秒数(0~59)setSeconds()
,设置秒数。如果超过59增加分钟数。toLocatimeString()
,获得时分秒
案例
- 获得当前的日期和时间,格式为:
yyyy-mm-dd H:i:s
function formatDate(){
//获得当前时间的对象。
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var min = date.getMinutes();
var seconds = date.getSeconds();
//拼装字符串
//:`yyyy-mm-dd H:i:s`
return year + '-' + (month+1) + '-' + day + ' ' + hour + ':' + min + ':' + seconds;
}
console.log(formatDate());
包装对象
实际上在JavaScript中提供了三个特殊的构造函数Number()
、String()
、Boolean()
。可以通过new操作符来调用它们生成对应类型的对象。
var str = new String('abc');
console.log(str);
通过上面可以看出来,确实是个对象__proto__属性
,指向了原型对象,原型对象中有大量的方法、属性。
根本不使用这三个构造函数。当把number、boolean、string类型当做对象调用的时候,它会自动的调用对应的构造函数生成一个对象。
var str = 'abc';//声明了一个字符串放在了str中。
//当执行str.length时 发现是对象调用,js内部自动调用new String('abc')创建一个包装对象。
//然后就可以使用属性、方法。当使用完成之后(本行 str.length),又会自动将包装对象转换为字符串。
console.log(str.length);
//这里打印还是基本类型
console.log(str);
number、boolean、string都会经过上面的这个过程。
普通对象和包装对象的区别:对象的生存周期。
- 使用new操作符创建的引用类型的实例,在执行时候,当前作用域中会一直存在(存在于内存中)。
- 自动创建的基本包装类型对象,只存在于一行代码的一瞬间,然后立即被销毁。