javascript高级程序编程-学习笔记(基础)
1.js实现
js诞生:为了验证字段是否输出(前期)
1.1分类
Esmascript,Dom,Bom
语法,类型,语句,关键字,保留字,操作符,对象
2.script
async 立即下载
charset 字符集
defer 文档完全解析后执行
src 外部文件
type 脚本语言的内容文件
2.1 嵌入式代码与外部文件(可维护,缓存,适应未来)
2.2 文档模式:混杂,标准
2.3 浏览器不支持脚本时候显示
3.语法,数据类型,控制流语句,函数
3.1 语法
1.区分大小写
2.标识符(驼峰大小写)
3.注释 // /* */
4.严格模式 ‘use strict’
5.语句 (代码块,看起来清晰)
3.2 关键字,保留字
3.3 变量(松散型)
1.var message; undefined
2. function test(){
var message = 'hi'; //局部变量 test(); alert(message);//错误,变量再函数退出后被销毁
}
3. function test(){
message = 'hi'; //全局变量 可以任何地方被引用,不推荐
}
3.4 数据类型
undefined,null,Boolean, Number, String,Object
1.typeof 操作符
2.Undefined,(var声明未进行初始化)
var message; //尚未定义也是,不过打印会报错
3.Null 类型(对象空指针 typeof(Object)
保存对象的变量还没有真正保存对象,就应该明确让变量保存null值
4.Boolean 类型 true false
Boolean true false
String 任何非空字符串 ""
Number 任何非空字符串 0和NaN
Object 任何对象 null
Undefined n/a undefined
5.Number
5.1 浮点数值
5.2 数值范围
Number.MIN_VALUE 5e-324
Number.MAX_VALUE 1.79766931348623157e+308
5.3 NaN (数值) (Not a Number)
本来要返回数值的操作未返回数值
isNaN(函数)
5.4 数值转换
Number() 可用于任何类型(null(0) undefined(NaN) 字符串(“”=0,无数字=NaN)
5.5 String类型
字符字面量 /n 换行 \t 制表 /r 回车
length 属性
toString() 方法null,undefine没有这个方法
6. Object 类型
constructor (构造函数)
hasOwnproperty(propertyName) 检测属性
isPrototypeof(object) 检测原型
toLocalString() 返回对象字符串表示
toString()
valueOf 返回对象的字符串,数值或布尔值通常与toString返回相同
3.5 操作符
3.6 语句 if do while while for for in
3.7 函数
理解参数arguments
没有重载
4.变量 作用域 和 内存问题
4.1 基本类型和引用类型的值
基本类型:Undefined,Null,Boolean,Number,String
引用类型:对象
4.1.1 动态的属性(可添加属性)
4.1.2 复制变量值 (指针指向通一个堆中)
4.1.3 传递参数*
基本类型值的传递如同基本类型变量的复制一样,
引用类型值的复制,如同引用变量类型变量复制一致
4.1.4 检测类型
typeof
instanceof(object, Array, RegExp)
4.2 执行环境以及作用域
4.2.1 延长作用域链
4.2.2 没有块级作用域
4.2.3 垃圾收集
5.引用类型(属性&方法)
5.1 Object类型
var person = new Object();
var person = {name:'a'}
person['name']
person.name
5.2 Array 类型
5.2.1 检测数组
if(value instanceof Array)
if(Array.isArray(value)) ie9+
5.2.2 转换方法
tolocaleString()
toString() //字符串
valueof() //数组
toString() ,分割
join() 也可以使数组变成字符串,分割方式自定义
5.2.3 栈方法
push pop
5.2.4 队列方法 LIFO
shift push
取得第一个元素 改变数组
5.2.5 重排序 reverse() sort()
5.2.6 操作方法
concat() 合并
slice() 0 开始
splice() most powerful
5.2.7 位置方法
indexOf lastIndexOf
从0开始找,
-1没有找到
5.2.8 迭代方法
every filter forEach map some
true 没有返回
false
5.2.9 缩小方法
reduce()
reduceRight()
5.3 Date类型
var now = new Date();
Date.UTC()
5.4 RegExp类型
g全局 i不区分大小写 m多行
var pattern = //
pattern.test()
5.5 Function 类型
5.5.1 没有重载(深入理解)
5.5.2 函数声明与函数表达式
函数声明:变量提升
函数表达式:变量不提升
5.5.3 作为值的函数
5.5.4 函数内部属性
arguments this
this 当在网页的时候全局作用域中
调用函数时,this对象引用的就是window
arguments.callee.caller
5.5.5 属性和方法
length 函数希望接受的命名参数的个数
prototype
apply 数组 arguments
call 设置函数体的this对象的值
bind() IE9+
扩充函数赖以运行的作用域
对象不需要与方法有任何耦合关系
5.5.6 基本包装类型
引用类型与基本包装类型的主要区别就是对象的生存值
Boolean 类型 建议永远不用使用Boolean对象
对象 true
Number 类型 Number对象是Number类型的实例
String 类型
字符方法 charAt() charCodeAt()
字符串操作方法 concat() 拼接
slice()
substr()
substring()
字符串位置方法 indexOf lastIndexOf
trim方法 删除前置以及后缀所有空格
大小写转换 toLowerCase()
toUpperCase()
字符串的模式匹配方法 match() replace()
localeCompare()
fromCharCode()
HTML方法 encodeURI() eval()
Math 对象 min() max()
ceil() floor() round() random()
6.面向对象的程序设计
6.1 属性类型
6.1.1 数据属性
configurable 能否delete
enumerable 能否for in返回属性
unitable 能否修改属性
value 默认undefined
Object defineProperty(person, "name"{
writable: false,
value : 'cc'
})
6.1.2 访问器属性
getter setter
读取属性的特性
getOwnpropertyDescriptor()
6.2 创建对象
6.2.1 工厂模式
function createPerson(name, age,job){
var o = new Object()
o.name = name;
o.age = age;
o.job = job
return o;
}
6.2.2 构造函数模式
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayname = function(){
alert(this.name)
}
}
6.2.3 原型模式
function Person(){
}
person.prototype.name = '';
person.prototype.age = 29;
6.3 继承
function inheritPrototype(subType, superType){
var prototype = Object(superType);
prototype.constructor = subType;
subType.prototype = prototype;
}
7.函数表达式
hi();
function hi(){ //提升
}