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是面向对象的

原文地址:https://www.cnblogs.com/xiaofenguo/p/13340966.html