座右铭写在前面:
温故而知新..
温故而知新..
温故而知新!!!
//获取类型的方式:
typeof 运算符(关键字) 类型:小写 number
构造函数 Number Object Function
Number String Boolean Object Array Date RegExp //构造函数
Math : //对象
创建对象的两种方式:
var obj={} var obj1 =new Object();
数据类型:
js中是有数据类型的,是弱类型:有数据类型,但是不受数据类型的约束
不要修改变量的类型
数据类型 两大类:
1.值类型:(简单类型,基本类型):number string boolean null underfind
特殊::// 使用 typeof null //object (计算机原理)
2.引用类型:(复杂类型): object (统称为 对象 /object)
特殊:: // (函数也是对象, typeof 函数 // 结果func )
// 函数是js中的一等公民
//typeof 返回值 是字符串 var abc =typeof 123; typeof abc //string
_________________________________________________________
什么是值类型 什么是引用类型
1.如果一个变量中存储的是值本身,那么就是一个值类型
值类型就是存储在 栈 中的
栈(数据结构)(先进后出)
js是没法操作内存的
2.如果一个变量中存储的是数据的地址(引用),就是引用类型
引用类型分为两种存储空间:1.变量的存储的引用 2.值(数据)
栈中存储的是:对象的地址
堆中存储的是:对象本身
函数的形参可以看作是:函数内部声明的局部变量
__________________________________________________________
===
//先比较类型在比较值;如果类型不同,直接返回:false ,不会再比较值
==
//比较的时候,会进行类型的转换 不推荐使用
[]==1 //false null ==underfind
高程 52页!!
___________________________________________________________
逻辑中断:
逻辑或:表达式1 || 表达式2
作用:如果第一个表达式的值转化为true ,那么久返回第一个表达式的值
如果第一个表达式转化为false ,那么久返回第二个表达式
中断:不会执行后面
一般用在:给函数参数设置默认值;
逻辑与:表达式1 && 表达式2
作用:和逻辑与完全相反;
用法:if(true){ fn(); } === true && fn(); // 满足某个条件在调用
___________________________________________________________
in 运算符
语法:布尔值=属性 in 对象
作用:看对象能不能访问到该属性,如果能访问到结果就是true,否则就是fasle
in运算符前面就是一个字符串或者可以转化为一个字符串
特殊::对于属性值为undefind的情况,只能通过in运算进行判断
var arr [1]; console.log(1 in arr) //也可以用来判断数组的属性
//数组的索引,就相当于对象的属性
属性是字符串要用'' var obj = {name:'xm'} con.log('name' in obj)
//通过点运算符(,) 就是访问对象属性,也就是看下对象中有没有点指定的
属性名 能用点就别用中括号
delete 运算符
语法: delete 对象.属性
作用: 用来删除对象的属性
delete obj1.name;//删除name属性 添加属性: obj1.name=undefined
特点:没有改变数组的长度 delete arr[0];//一般 数组用splice(0,1)
//清空数组 arr.length=0; //将数组中的内容全部移出,长度变为0
//声明变量的时候,可以不使用var,这样会创建全局变量.不推荐!!!!
test='小明'
delete window.test; console.log(test) //报错 con.log('test' in window) //fasle
var test ='123' delete window.test;//删除不掉 con.log(test)//123
_____________________________________________________________
循环:
for 遍历数组
注意:删除数组元素的时候,有坑!!!! splice(索引 ,个数)
for-in 遍历对象
while 如果不知道遍历次数,就用while
do-while 先执行一些操作,在遍历
分支语句:
if-else-if
switch-case
case 1:
case 2:
console.log();
跳转语句:
break; //跳出整个循环 一般就是用在循环中
continue; //跳出本次循环,进行下一次循环
return ; //只能用在函数中 //让函数停止运行
syntex 语法错误
__________________________________________________________函数:
创建函数的语法:
1. var fn =function(){} //函数表达式
2. function foo(){}; //函数声明
//不同点 预解析时不同 函数提升不同
3. var bar =new Function(); //通过构造函数来创建
//函数就是 返回值 和 参数 this
可以通过 return 来设置函数的返回值,是可选的;
调用函数是如果没有传参数,此时参数的值为 undefined;
函数的参数是有顺序的,如果想给后面的参数传值,前面必须有值
(undefined,1)
形参:只能在函数 内部使用//可以把函数参数看作是函数内部的局部变量
最终由调用的实参来决定的,只是占个位置
__________________________________________________________异常处理:
语法:
try 尝试
catch 捕获/抓住
finally 最后/最终
语法: try{ 异常代码 }catch(error){ 执行catch中代码 }finally{
不管代码是否报错,finally中的代码是一定要执行的!! }
__________________________________________________________表达式:
有值;
只要能够作为方法参数的内容,就是表达式
语句:
分号; a=1;
高级程序设计 5版
_____________________________________________________________
面向对象:
是一种编程思想;或者是组织代码的一种形式;万物皆对象;
怎么理解面向对象?
1.面向过程 和 面向对象 的 区别
2.javaScript中的面向对象是如何实现的
3.其他编程语言中的面向对象的表现形式(了解)
面向过程 :所有的事情都是需要我们自己来完成的,亲力亲为;
我们在面向过程中是处于执行者的角色;
例: 创建 按钮 ;绑定事件 ;添加元素;
document.createTextNode 创建文本节点
一般就是在代码量比较少,功能比较简单的场景 适用;
面向对象 :我们想完成一件事件只需要找到某个对象然后让它帮我们完成即可;
我们在面向对象中处于调度者的角色;
例:jquery 操作dom就是一个面向对象的方式 (用一个方法)
一般适用于项目规模较大,代码量较多;
面向过程的 方式 要比面向对象的方式代码执行效率高!!
但是面向对象 对于大型项目来说有利于多人合作开发(团队合作),有利于代码
的维护,扩展,更新迭代;
库 框架 :按照面向对象的思想组织代码;
DRY 原则: don`t repeat yourself 不要重复你自己
1.需要维护两份代码 2.多人都完成一份相同的代码造成浪费;
全局污染:(命名冲突)
使用对象组织代码带来的优势:
保证全局环境中只有一个对象,将全局环境污染降到最低
按照模块进行代码的划分
不管是代码的维护还是功能的扩展都变得更加简洁了
使用命名空间的方式 组织代码:
js本身是没有命名空间的概念,只能通过代码技巧来进行模块(还是为了避免
全局污染的问题)
顶级命名空间 /一级命名空间
这种方式使用与全局环境中只有一个对象的场景
TUI 雅虎UI框架
___________________________________________________________
构建面向对象:
使用构造函数来创建对象 (创建构造函数就是一个普通的函数 大写(约定))
function Person(){
如果要给构造函数创建出来的实例对象添加属性,需要通过
this.name='xm';
this.age=19;
};
var p =new Person(); //实例对象
构造函数与new运算符,配合用来创建函数并初始化
创建 实例对象:由构造函数创建出来的对象就叫实例对象
p是构造函数Person 的实例对象
实现复用的目的
只要调用new person 就是创建一个新的实例对象
原型:
原型:用来存放一些公共的属性或方法 作用:数据共享
让多个实例对象访问同一个对象中内容
获取到原型: 构造函数.prototype 获取到原型.
类型:object
Student.prototype.say=function(){};
实例对象可以访问到 原型对象 中的属性和方法;
对象中搞得方法,放到了 原型中
__proto__ :通过访问实例对象的属性,可以访问到原型
prototype :通过访问构造函数可以访问到原型
最佳实践:将属性放到构造函数中,将所有的方法以及公共的属性都放到
原型对象中 这就是使用 构造函数+原型 组织代码的最佳实践;
________________________________________________________
//实例对象可以访问到 原型对象的属性和方法
搜索原则:
1.会在对象本身查找有没有该属性,如果有直接返回
2.如果在对象本身没有找到属性,那么就会到原型对象中查看有没有这个属性
3.如果在原型对象中没有找到属性,那么就会到原型对象的原型对象中查找
4.一直查找到object.protopyte对象,如果找到就返回属性的值
5.如果最终也没找到属性,那么此时属性的值:undefined
总结:
首先在对象中查找,然后到原型对象中查找,最终,找不到就是 undefined;
__________________________________________________________
如果构造函数没有参数,那么小括号是可以省略的
__proto__ 是一个非标准的属性,没有规范来描述这个属性的作用
这个属性是浏览器实现的;
在生产环境(正式项目)中不要使用这个属性!!! 如果要操作原型值能通过
prototype来操作;
笔记连载中 , 学习座右铭: 温故而知新!