A.
学习一门语言,入门需要掌握:关键字,字符串的操作,集合操作(数组,键值对),文件(js没有)。讲的是基于ECMAV3版本过渡到V5的版本 V6
1.别的语言面向对象都来源于c++
2.94-95年,为了表单验证(验证邮箱,注册等)JavaScript里面面向对象就是键值对的集合, 为了看起来像c++语言,引入许多的语法糖
3.函数也是变量,跟字符串abc,数字123都一样。键值对也是变量。复合类型(对象类型) 就由基本类型组合而成。
基本类型:(number,string,boolean),大写的是一个包装类型,是一个包装构造函数, 是一个包装对象。
复合类型:Number,String,Date,Array,Object,RegExp,Function,Math
4.typeof是string类型
5.in运算符------------是判断一个对象里面是否具有某个属性
语法:boolean“name”in Object
6.判断对象有某个属性成员还可以怎么处理?w7 IE8; XP IE6
7.函数或者方法也是一个变量名,不加(),就直接访问变量
浏览器能力检测的代码
if(document.getElementdByClassName){
//有该方法
}else{
//没有该方法
}
鸭子辨型(只要具有鸭子的特征,就是鸭子)
在JavaScript中创建对象用new运算符,字面量(直接量)
区别:new+构造函数,可以复用
直接量直接使用
//引出重要:值类型,引用类型(对象)
值类型:存在栈上,按值传递(将变量中的数据完整的拷贝一份, 赋值给新的变量
)
引用类型:引用类型表示变量存储的是数据的地址( 引用 ) 地址一般是利用指针来操作的
关联数组
B.
var o3={
n:[1,2,3],
m:{n:123}
}
javascript是没有办法访问地址
解析引擎会把n和m绑定在一起,访问就快
function就是重复执行的代码块
1.逻辑中断
1. ||
如果第一个为真 就返回第一个表达式, 如果为假 则返回第二个表达式
&&
如果第一个为假 就返回第一个表达式, 如果为真则返回第二个表达式
**************表达式1 && 表达式2 && 表达式1*********
先验证是否满足 表达式1 如果满足 就执行表达式2 的验证
验证如果失败返回 假
验证如果成功返回 表达式
2.delete 删除 运算符
语法: boolean delete 数据;
功能: 在当前作用域上删除数据
用法:
1,删除数组中的一个元素(不会删除数组长度,会当成undefined)
2,删除一个对象的属性或方法(jquery中的缓存框架,像数组的键值对)
3,删除一个没有用 var 声明 变量
3.报错会结束代码的运行(异常处理)
1.try-catch是if-else的增强
有些时候代码的错误是需要处理的, 但是又不清楚是否会在这里报错
try-catch 的语法:
try {
//可能出现错误的代码
} catch ( e ) { // 可以打印e.name 错误类型 e.massage 详细错误信息
//如果出现错误才会执行
} finally { // 可选
//无论是否出现异常, 最后执行
}
* 这里的错误有一个术语叫 异常 exception
// try 试一下
//catch 抓住 ------ 异常
* 自己抛出异常(自定义错误)
throw
语法: throw 对象 //throw new Error( msg )
一般对象是 new Error( '错误消息' );
4.函数的创建
1.声明式函数,可以在上面调用(js解析过程);
2.函数的字面量(Lambda表达式)------------ 此时函数作为 表达式 存在
凡是将数据 和 运算符等联系起来有值的式子就是表达式
注:函数的声明式不允许出现在表达式中(如果写了,要么报错,要么默认转换为表达式); 函数的字面量允许出现在任何地方.
3.new Function
//比较全的查询
1. Mdn---------
2. w3school----------入门,不全
C.
传统的构造函数的方式
1.对象
从代码的角度考虑:键值对的集合
2.什么是面向对象?(从两个方面回答)
1>.面向对象和面向过程的思想
2>.JS中的面向对象和其他语言中的面向对象的表现形式
面向过程:所有的细节步骤过程必须一步一步亲力亲为,顺序不能颠倒
面向对象:找到能够完成这个功能的对象。执行者变为调度者(管理者),对象还是面向过程。
总:面向对象是对面向过程的包装。
3.为什么面向对象--全局污染
在js中重复的var无效
便于开发,污染更少,便于维护
4.面向对象的基本模型
1>.将数据和功能封装成函数(方法)
2>.将相关的功能绑定到一块(对象)
3>.将功能进行分组(模块)
5.DOM操作复习
html作为一个字符串很难处理,把它看成“对象”好操作。
增:增加元素,增加属性,增加内容
删,改,查,其他(CSS--轮播图)
DOM是典型的面向对象
6.json的表示法,对象的直接量(把变量打包)
Var p={
‘Name’:”jim”,
‘Age’: ,
‘Sex’:
};
json 对象的方法:简单,方便,简洁,复用不高的可以用
使用 json 对象的方法有一个缺点: 无法复用
构造方法也是一个函数,就是为了复用
1>.构造函数命名一般首字母大写(但并不是绝对)
2>.构造函数(构造函数里面不需要return,它的return有别的含义)
3>.为对象添加成员使用this.成员名=值(利用对象的动态特性给对象添加成员)
缺:每次都写。。。。。。。。。。所以要传参
7.在参数中写变量的好处是:
1>.相当于声明了变量,
2>.调用时又一次赋值
在JS里面写函数,尽量的把名字写的越短越好。
在js中重复的var无效
形参:形式参数,占位符
实参:实际传的参数
Token:表示语法错误
构造函数方法的复用
电脑很卡的话:放固态,放内存
Cpu解码硬盘中的文件,那会非常的慢,传统的硬盘是叫机械硬盘(光盘+机械粒),
机械粒有硬盘损耗
1G=1024M
Cpu的主频: 1秒钟能执行多少条指令
固态硬盘-------->内存------->缓存
JavaScript不是原生的代码,是寄宿在浏览器里运行的代码
分析的结论:
1.JavaScript运行是需要内存的
2.按之前的方式写,表示每一个函数都具有那个函数的一个副本,比较消耗内存
所以我们希望方法共享
原型(prototype)
在函数里面,有一个属性,叫prototype,只要是函数,就有Prototype属性
由该函数创建的对象会默认连接到该属性上,Prototype也是一个对象
在访问对象的某一个属性(方法)的时候,首先会在当前对象中查找有没有该属性。
如果当前对象没有,就会在构造方法的定义规则中查找。(当前对象)
如果没有,就会到与对象联系起来的构造函数的prototype属性中找。
以上3点总结起来1句话:在访问一个对象属性的时候,首先在当前对象中找,如果没有在其原型对象(创建它的构造函数的原型属性)中找。
对象会到与它联系的Prototype中找数据,可以考虑将共享的数据,放到里面。这样,无论调用几次,都只有一个副本。
调试:__proto__是灰色的,说明不是当前对象里面默认的
对象中有一个属性,叫__proto__
通过调试可以发现 : 对象的__proto__与创建它的构造函数prototype , 是同一个东西。
__proto__是非标准属性(IE8不支持),将来可能会归为标准属性。在开发时尽量不要使用它
F.prototype 原型属性
O.__proto__ 原型对象
F.prototype 是构造函数F 的 原型属性
F.prototype 是对象O的 原型对象
注:以上的描述在将来工作中或许会改变,因为它没有被规范化
小结:
1.面向对象的复习
2.为什么要使用面向对象
3.面向对象带来的一些优势:作为一个开发者或对象的创建者,优势并不是很大,因为代码 量更大,更复杂了;但是如果用创建的对象来做,进行二次开发(比如用jQuery),会提高你的开发效率
面向对象是找对象帮你做事,但它本身可能是面向过程的
基本类型转化。。。
内置对象里的方法array对象 data对象 math方法.....
四舍五入一定要掌握,在不同的浏览器精度处理是不一样的
函数的操作要敏感,每写一句代码都问自己为什么
为什么最后封装那么写?因为传统的构造函数会浪费我们的内存
为什么写构造方法?因为对象的字面量不能复用
为什么要写对象?因为繁复的方法放在作用域当中,会影响到我全局作用域当中的其他变量
为什么写函数?因为很长的代码写的容易出错
DOM的操作,DOM属性和方法,parentnode,nextsbling,previousSbling,firstchild,lastchild,元素节点(nodetype=1)和文本节点的区分(nodetype=3),属性节点(nodetype=2),nodetype=11 ?
属性操作:getAttribute,setAttribute
appendChild,insertbefore.......
函数就是在定义一个公式,一个规则,先做什么,再做什么。。。。。。。。在做这个公式的时候,需要替代的东西,把它变成参数