特点:动态性,不必事先创建对象;弱类型,无需在声明时指定;解释
数据类型:基本数据类型(String、Number、boolean);对象(属性集合,键值散列表,复合数据类型);数组(有序列表);函数(包含可执行代码)
typeof
valueof():将一个对象的值转换成一个合乎上下文需求的基本类型。
tostring():打印对象对应的字符串,所有非空对象在布尔环境下都被转换成true。
类型的判断:instanceof+类型
一.变量:基本类型和引用类型
作用域:无var为全局
二。运算符
[]数组、对象
(.)
==相等(对两边的操作数做类型转换) ===等同(不会)
相等:类型同时,判断等同性。(值)
类型不同时,null、undefined相等
数字与字串,字串转为数字比
true->1,false->0,比
对象、数字/字串,对象(tostring/valueof)原始值比
其他为false。
等同:类型不同,false
类型同,全数字:值(NAN除外,NAN与本身也不等)
全字串:字串值
全布尔:true/false
俩操作数引用同一个对象
俩操作数均为null/undefined
三。对象和json json动态创建对象
1.引擎初始化会创建一个全局对象window,只需要在顶级作用域用var global=this即可
2.原型对象:遍历原型链,是由上而下,最先遇到的先返回,可用于重载
3.this:当前上下文,调用者引用
4.对象的声明三种方式
new object()然后动态加属性
类原型,然后new+对象名来构建新对象
json
5.json
多个返回值应用
遍历一个js对象:for(var item in json){}
6.函数:解释器会传给函数一个类似于数组的内部值arguments
7.js函数是局部作用域内运行的,在局部作用域内运行的函数体可以访问其外层的变量和函数。其作用域在定义时(词法分析时)就确定下来,而并非执行时确定。
8.局部变量隶属于调用对象。
参数和局部变量作为调用对象属性存储。
全局作用链只有全局对象,函数作用域链有调用对象、全局变量。
查找变量为遍历作用域链,一直向上找,找到返回,无则undefined。
四。函数上下文
1.call和apply通常用来修改函数的上下文。
函数中的this指针将被替换成call/apply的第一个参数
2.使用函数:赋给一个变量,赋为对象的属性,作为参数,返回值
五。数组
同一数组可有完全不同类型的元素。
有栈、列表等操作
length为可变属性、控制数组长度
字符串也可作为数组下标
数字排序需提供一个对象指定规则
delete的缺陷
remove写法应用slice
for..in变量数组
不要对全局对象进行扩展,容易有bug
五。正则
1.RegExp:js的内置类
2.元字符:需元字符字面意思,须转义。
特殊字符:以转义“\”为前导,如要字面意思,同样转义。
范围及重复:{,}
3.test()只是测试目标串是否有表达式匹配部分,而不一定整个串匹配、可加/^ $/
4.分组与引用
括号用途:(1)将子表达式标记,以区别于其他表达式
(2)用来分组 pattern.exec(str) 第一个元素为整个串,第二个为第1个分组,类推
(3)对引用起辅助作用(在同一个表达式中,后边的式子可引用前边匹配文本) 如 “\1”表示第一个分组,类推
5.创建
(1)字面量 var regex=/pattern/;
(2)RegExp
一般:var regex=/pattern/[switchs]; switch:i、m、g
6。RegExp对象的方法
(1)test()测试串中是否有合乎模式的匹配,而不关心匹配的结果
(2)exec()对串进行匹配
(3)complile()编译正则表达式==》重新声明一个正则
7.String中的正则表达式
match()匹配正则表达式,返回匹配数组
replace()替换
split()分割
search()查找,返回首次发现的位置,对匹配的组进行引用 $n
each:Jquery中遍历集合的方式
六。闭包
1.如果在函数func内部声明函数inner,然后在函数外部调用inner,这过程即产生一个闭包。
2.闭包允许引用在于外部函数中的变量。然而,它并不是使用该变量创建时的值。相反,他会使用该变量最后的值。
*因此,可立即执行内部函数获得创建时候的当前值。
3.用途:
(1)即有的函数只执行一次,其内部变量无需维护,比如UI的初始化。(匿名自执行函数)
(2)缓存:闭包不会释放外部的引用,从而函数内部的值得以保留。
(3)实现封装
4.应注意问题
(1)内存泄露 解释器回收机制,引用计数
(2)上下文引用:this(inner函数中)
七。面向对象的js
1.原型继承:通过原型链来实现
(1)引用:js的引用始终指向最终的对象,而非引用本身
(2)new:js中通过new操作符来作用于一个函数
实际上会发生这样的动作:创建一个空对象,然后用函数的apply方法,将这个空对象传入作为apply的第一个参数,及上下文参数。这样函数北部的this就会被这个空对象替代。
2.封装:可为类添加静态成员,只需为函数对象家一个属性即可。
3.工具包base
创建类的方式:base.extend方法传入一个json对象(含成员和方法)
新类.extend 可实现继承
模拟单例:constructor:null
4.事件分发器:观察者模式
UI组件发出事件到事件分发器,也可以注册自己到分发器,当自己关心的事件到达时,进行响应。
八。函数式的js特点
1函数不依赖于对象而独立存在
2函数可以保持自己内部数据(闭包)
3匿名函数(lambda)使用之后就被释放
4高阶函数,一个或多个函数为参数的函数
5.柯里化:预先将函数的某些参数传入,得到一个简单的函数,但是预先传入的参数被保存在闭包中。