js
学习js MDN为标准
浏览器端js:
ECMAScript基础语法 数据类型 运算符 函数。。。。 ES1~ES8
BOM window location history navigator 正则表达式 Date
DOM div p span
数据类型
基本数据类型(值类型): Number String Boolean null undefined
复杂数据类型(引用类型):Array Function Object
undefiend 声明而未初始化 值为undefined 对象中不存在的属性值
null 空对象
对象是键值对集合:对象是由属性和方法组成的。
属性的操作:
student.name
student['name']
var str='name';
student[str];
.语法的局限性:
1 不能使用js中关键字 保留字
2 不能使用数字
student[this] 不能 student.this
student[3] 不能使用student.3
删除属性 delete student.age
delete关键字,只能删除对象中的属性,不能删除变量
构造函数:
如果函数没有返回值,就是没有return,或者返回值是一个基本数据类型,则返回值就是这个这个函数的实例,
如果返回的是一个复杂数据类型,就是引用数据类型,则返回值就不会该函数的实例了,就是返回的那个负责数据类型;
如何判断一个数据是不是复杂数据类型:
1排除法 不是数字 字符串 布尔 null undefined
new Object() 等同于对象字面量
构造函数返回值:
String 是一个内置函数:
直接调用:String() 返回值是一个字符串
通过构造函数调用:
new String() 返回值是是个实例
//一个函数通过new调用,或者不通过new调用,很多时候会有截然不同的返回值;
判断一个对象是否是一个函数的实例?
xxx instanceof Person
返回值是true就是,false就不是
typeof 只能判断基本数据类型 数字 字符串 布尔值 null undefined 函数
判断数据的构造函数只能使用instanceof
判断数据类型可以使用:obj.constructor==Object
Object.prototype.toString.call(obj)
语言:
js有继承;
概念:
让一个对象可以访问到另一个对象中的属性和方法,我们把这种方式称之为继承;
function Person(){
this.say=function(){}
}
var p1=new Person();
var p2=new Person()'
p1.say==p2.say//false
造成内存浪费,解决办法把方法写在他们共同的父对象中,其实他们共同的父对象就可以通过Person.prototype来获取
Person.hello=function(){}
p1.hello==p2.hello //true
p1.hello==Person.prototype.hello//true
结论:
只要某个构造函数的prototype对象中添加某个属性 方法,那么这样的属性,方法都可以被所有的构造函数的实例共享
构造函数的prototype对象称之为原型对象,只构造函数的实例的原型对象;
Person的原型对象是:(Person的构造函数是Function,所以Person的原型对象是 Function.prototype)
判断一个实例的构造函数:
第一步;这个实例的构造函数是什么
第二步:他的构造函数的prototype就是这个实例的原型对象
js是面向对象的