网盘地址
提取码:vh81
笔记
第二章
2.1script标签
<script>元素属性
:async、charset、defer、language、src、type
async和defer只对外部脚本有效,language已废弃,type默认为“text/javascript”- defer属性可以让脚本在文档完全呈现之后再执行,且按照指定的顺序执行
- 设置了async的脚本文件不一定按照书写顺序执行,所以文件间应该互不依赖;异步脚本会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发前或后执行。支持异步脚本的浏览器有Firefox3.6,Safari5和Chrome。
- 内嵌时,代码中任何地方不能出现
"</script">
字符串,否则会认为是结束,可以将字符串分隔两部分解决,如:alert<\/script>
2.3文档模式
- 混杂模式和标准模式:两种模式主要影响CSS内容的呈现,某些情况也会影响到JavaScript的解释执行
2.4noscript标签
- 浏览器不支持脚本或禁用脚本
第三章
3.1语法
- 标识符:字母,下划线或美元开头,其他可以字母,下划线,美元或数字;字母也可以包含拓展的ASCII或Unicode字母字符,但不推荐
- 严格模式:”use strict“
3.4数据类型
- typeof:undefined、boolean、string、number、object、function
safari5及之前版本和chrome7及之前版本对正则表达式用typeof会返回function,其他返回object - typeof对未初始化和未声明变量都返回undefined
- undefined的值派生自null
- Boolean()
- 浮点值的内存空间是整数的两倍,所以ECMAscript会在不失时机地把浮点数转化为整数
- Number.MAX_VALUE ,Number.MIN_VALUE ,Number.NEGATIVE_INFINITY ,Number.POSITIVE_INFINITY ,Infinity ,isFinite()
- NaN:任何操作返回NaN,与任何值不等,包括自身
- isNaN():适用对象,首先调用valueOf(),测试返回值是否可以转化为数值,如果不行,就基于返回值调用toString()方法,再测试返回值
- Number()任何数据类型,parseInt(),parseFloat()适用字符串;一元加操作符与Number()函数相同,可区分十六进制数转化为十进制,空字符串为0,parseInt()空字符串为NaN,可传入第二个参数表示几进制;parseFloat()只解析十进制,如果是整数的数,会返回整数,可识别”3.125e7“
- 字符串:
1、特点:不可变,每次改变都会销毁原来返回新的
2、toString(),字符串也有这个方法,但是null和undefined没有,可以穿参数,参数为基数,默认为10
3、String(),如果有toString方法,调用它,没有,如果是null,返回”null“,是undefined,返回”undefined" - object
1、属性和方法:Constructor;hasOwnProperty检查属性是否在当前对象中,参数要以字符串形式传入;isPrototypeOf检查传入对象是否是另一个对象的原型;propertyIsEnumerable,检查给定属性能否用for-in语句枚举,参数必须以字符串形式传入
;toLocaleString(),返回对象的字符串表述,该字符串与执行环境的地区对应;toString()返回对象的字符串表示;valueOf()返回对象的字符串、数值或布尔表示,通常与toString()返回值相同 - ++,–除了可以作用在数字上,也可以作用在其他数据类型上,P57,需要先设定变量赋值为其他数据类型,然后再++或–,字符串时,字符串需要就是数值字符串
- 一元加减操作符作用在非数值类型字符串
- 位操作符,NaN和Infinity进行操作时都会被当成0,作用于非数值类型,会先Number()转换
1、按位非~:操作数负值减一,比普通表达式快,因为是最底层操作
2、按位与& 3、按位或| 4、按位异或^ 5、左移<<,不会影响符号位 6、有符号右移>>,符号位填充空缺 7、无符号右移>>> - 逻辑
1、逻辑非 2、逻辑与,在操作数不是布尔值的情况下返回值就不一定是布尔值 - 乘法,除法,求模
- 加操作符:“sad”+10+5 -> sad105
- 关系操作符P69
- 逗号操作符
- for-in循环对象如果为null或undefined就不会执行循坏体
- lable标签
- with语句,严格模式下不允许使用,大量使用会导致性能下降
- switch语句如果缺少break,就会继续执行下一条case,default不用break,case的值不一定要常量,可以是变量或表达式,switch在进行比较时使用的是全等操作
- return可以不带返回值,返回的是undefined
- arguments与命名参数值保持同步
第四章
- 不能给基本类型的值添加属性,如:
var name="tom" ;tom.age=12 //undefined
- 任何在内部应用call方法的对象在用typeof时返回function,不同浏览器对正则返回有所差别,确定值是哪种引用类型用instanceof
- 延长作用域:try-catch,with
- 垃圾收集:标记清除,引用计数(循环引用),性能问题(垃圾回收时间间隔)
第五章
数组
- 通过对象字面量定义对象时,实际上不会调用object的构造函数
- new Array()传入负数报错,也可不加new,在使用字面量表示法时不会调用Array构造函数,var arr = [1,2,]在不同浏览器中会有不同的项
- 数组的length属性可以改变数组长度
- 检测数组:
instanceof问题:如果网页包含多个框架就存在多个全局执行环境,导致错误。
isArray检测:IE9+,firefox4+,Safari5+,opera10.5+和chrome - 转换数组:toString()返回字符串,valueOf()返回数组
- join()不传入值或undefined,用逗号分隔,IE7及更早会用"undefined“分隔,如果数组某项为null或undefined,使用join,toString,valueOf,toLocaleString会以空字符表示
- 栈方法:push()返回长度,pop()返回弹出项
- 队列方法:shift()返回第一项,unshift()返回长度,IE8及以下对unshift返回值有所不同
- 重排序方法:
1、sort()方法:每项toString()再进行比较,就算本来是数字;接受一个比较函数做参数,如果第一个参数应在第二个参数前就返回负数,相等0,之后正数;返回排序后数组,比较函数的参数为数组的两个值P132
2、reverse(),返回排序后数组 - 操作方法:
1、concat():先创建副本再操作,不影响原数组
2、slice():不影响原数组,不包含结束位置的项,结束位置小于初始位置返回空数组,参数为负数加上长度slice(-2,-1)等于slice(3,4)
3、splice()返回从原数组中删除的项 - 位置方法:indexOf(),lastIndexOf(),使用全等查找,没找到返回-1,找到返回位置;支持浏览器IE9+,Firefox2+,Safari3+,Opera9.5+和Chrome
- 迭代方法:(val,index,arr)=>{}
1、every(),函数对每一项都返回true,那就返回true
2、filter(),返回该函数返回true的项组成的数组
3、forEach(),对数组每项运行函数,没有返回值
4、map(),对函数每项运行函数,返回结果数组
5、some(),任意一项返回true,返回true
以上方法都不会修改数组中的包含的值,支持浏览器IE9+,Firefox2+,Safari3+,Opera9.5+和Chrome - 缩小方法:迭代所有项,返回一个值
1、reduce(),第一个值,当前值,当前下标,数组
2、reduceRight()最后一项开始迭代
支持浏览器IE9+,Firefox3+,Safari4+,Opera10.5+和Chrome
Date类型
1、Date.parse,Date.UTC;将表示日期的字符串传给构造函数也会调用Date.parse;UTC接受年月日…,其中月份基于0开始,只有年和月是必须的,构造函数传入第一个参数是数值时,会调用Date.UTC,但是日期和时间是基于本地时区创建的
2、Date.now(),支持浏览器IE9+,Firefox3+,Safari3+,Opera10.5+和Chrome,不支持的浏览器用+new Date()也可达到同样的目的
3、继承的方法,toLocaleString(),toString(),不同浏览器显示格式不同,valueOf()返回毫秒数,可以用比较操作符(大于或小于)来比较日期
4、日期格式化方法:toDateString,toTimeString,toLocaleDateString,toLocaleTimeString,toUTCString
5、日期方法
RegExp类型:
1、var exp = / pattern / flags
2、flags:g全局,i不区分大小写,m多行模式
3、元字符需要转义,传入RegExp构造函数的两个值需要为字符串
4、实例属性:global,ignoreCase,lastIndex,multiline,source
5、实例方法
exec(),接受要应用的字符串,返回数组,包含额外两个属性,index和input,数组第一项是匹配字符串,其他为捕获的字符串,全局模式的设置与否会改变多次测试的结果P126
test(),
toString和toLocaleString方法都会返回正则表达式的字面量,valueOf返回正则表达式本身
6、构造函数属性,Opera不支持短属性名,短属性名需要用方括号访问,九个用于存储捕获组的属性RegExp.$1等
Function类型
1、函数是对象,函数名是指针
var sum = new Function("num1","num2","return num1+num2; );//不推荐,会导致两次解析
2、没有重载
3、alert(sum(10,10));function sum(n1,n2){return n1+n2};
可以正常显示20
4、函数内部属性:arguments,this,caller,arguments.callee。当全局环境中调用,caller的值为null,严格模式下callee和caller会有错误
5、函数属性和方法:length函数希望接受的命名参数的个数
6、严格模式下this值在未指定环境下调用,不会转为window,是undefined
7、call(),apply(),bind(),bind支持的浏览器IE9+,Firefox4+,Safari5.1+,Opera12+和Chrome
8、toLocaleString,toString,valueOf返回函数代码,格式不一定
基本包装类型
- Boolean,Number,String
- 读取模式访问字符串:创建String类型的实例,调用方法,销毁实例
- 对基本包装类型调用typeof返回object
- Object’构造函数会根据传入的值的类型返回相应基本包装类型的实例
var obj = new Object("new one");
alert("obj instanceOf String") //true
- Boolean重写了valueOf()方法,返回基本类型true或false,重写toString()方法,返回”true“或”false“
- Number重写了valueOf,toString和toLocaleString方法,valueOf返回数值,其他两个返回字符串,toString可传入表示基数的参数
- toFixed,按照指定的小数位返回数值的字符串表示,会四舍五入,IE8在传入0时会有问题
- toExponential,返回指数表示法,传入小数位参数
- toPrecision,返回合适的表达,可传入参数表示所有数字的位数(不包括指数部分),会根据数值选择调用 toFixed或toExponential
- charAt,charCodeAt;IE8及其他浏览器支持[]方法索引字符
- 字符操作方法:concat,slice,substr,substring,对原字符串都无影响。
- slice和substring第二个参数指向最后一个字符后的一个位置,substr指定返回的字符个数;传入负数,slice加上字符串长度,substr会把第一个加长度,第二个变零,subtring会把第二个变0,IE9前substr传入负值存在问题
- substring(3,0)会被自动转化为substring(0,3)
- indexOf,lastIndexOf,两者都接受第二个值,表示从哪里开始
- trim,IE9+,firefox3.5+,safari5+,opera10.5+,chrome;trimLeft和trimRight,firefox3.5+,safari5+,chrome8+
- toLowerCase,toLocaleLowerCase,toUpperCase,toLocaleUpperCase
- 模式匹配:match,本质与正则的exce相同,接受一个正则对象或正则表达式
search,参数同上,找到返回下标,不然返回-1
replace,第一个参数是正则或字符串,如果字符串,只替换一个,替换所有需要正则且g,如果第二个参数是字符串,可以为特殊字符,$&等;第二个参数也可以为函数 - split返回数组,第一个参数可以是字符串或正则,第二个表示数组大小;不同浏览器在正则有捕获组或未匹配项是会有不同
- localeCompare,formCharCode
- HTML方法
Global对象
1、URL编码方法,encodeURI,encodeURIComponent,decodeURI,decodeURIComponent
2、eval方法,参数为要执行语句的字符串,eval中创建的变量和函数都不会提升;严格模式下会有一些限制
3、可用如下获取Globle对象
var gl = function(){return this;}()
Math对象
1、selectFrom,接受两个值,应该返回的最大最小值