文章目录
简介
Javascript包含:
- ECMAScript
- DOM: DOM把整个页面映射为一个多层节点结构。HTML或XML页面中的每个组成部分都是某个类型的节点,这些节点包含着不同类型的数据
- BOM:开发人员使用BOM可以控制浏览器。包括
- 弹出新窗口功能
- 移动,缩放窗口
- 对cookies的支持
script标签元素属性
解释器对<script>
元素内部的代码求值完毕之前,页面中的其他内容不会被浏览器加载或显示。
- async: 表示应该立即下载脚本,但不妨碍页面的其他操作,如下载其他资源或加载其他脚本。由于异步因此不保证多个脚本的执行顺序。不建议在异步脚本中修改DOM。该特性只对外部脚本有效。异步脚本一定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发之前或者之后执行。
- defer:脚本延迟到文档完全被解析和显示之后再执行。此特性在HTML5已经明确规定,因此该参数会被忽略
基本概念
-
ECMAScript中的一切(变量,函数名,操作符)都区分大小写
-
ECMAScript标识符采用驼峰大小写格式
-
使用var操作符定义的变量将成为定义该变量作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后会被销毁
-
typeof的结果:
- “undefined“:如果这个值未定义
- “boolean“:如果这个值是布尔值
- “string“:如果这个值是字符串
- “number“:如果这个值是数值
- “object“:如果这个值是对象或者null
- “function“:如果这个值是函数
-
undefined 派生自 null,因此
null == undefined
会返回true -
只要意在保存的对象还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅体现了null作为空对象指针的惯例,而且有助于进一步区分null和undefined
-
ECMA中所有类型的值都能转为Boolean类型,可以调用函数
Boolean()
-
浮点数采用IEEE754标准,运算存在精度问题
-
ECMA能表示的最小数为
Number.MIN_VALUE
,最大数为Number.Max_Value
,超过这两个值会自动转为-+Infinity
-
NaN: 在一个应该返回数值的地方返回了非数值。NaN与任何数都不相等。
isNaN()
用来判断。isNaN(object)
的过程:- 先调用对象的
valueOf()
方法,然后判断该方法返回的值能否返回数值。 - 如果不能,基于这个返回值再调用
toString()
方法,再测试返回值
- 先调用对象的
-
数值转换
parseInt()/ parseFloat()
: 用于float转为数值。转化时忽略所有前导空格知道遇到第一个数字字符。不严格,如:"1234abc"转为“1234“,“ “转为NaNNumber()
: 可用于任何类型。严格,对于字符串中出现非数字的,一律NaN。对于空字符串,返回0
-
ECMAScript中的字符串是不可变的。要修改字符串,必须重新创建并销毁原来的。
-
toString()
转为字符串。null和undefined无法使用该方法。toString(num)
,指定num可以设置基数 -
String()
处理步骤(可以用于处理null和undefined):- 如果值有
toString()
方法,则调用该方法 - 如果是null或undefined,返回"null" 或 “undefined“
- 如果值有
-
Object的常见方法:
- Constructor: 构造函数
hasOwnProperty(propertyname)
: 检查给定属性在当前对象实例中是否存在isPrototypeOf(object)
: 检查传入的对象是不是另一个对象的原型propertyIsEnumerable(propertyname)
: 用于检查给定的属性是否能够使用for-in
语句来枚举toLocaleString()
:对象的字符串表示toString()
:对象的字符串表示valueOf()
:对象的字符串表示
-
for in
for (var prop in window) { document.write(prop); }
如果要迭代的对象为null或者undefined,会不执行循环体
-
函数参数
- ECMAScript函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。原因是参数在内部是用一个数组来表示,函数接收到的始终是这个数组,而不关系数组中的内容。
- 在函数体内可以用
arguments
对象来访问这个数组,通过下标访问每个参数,通过length
属性获取参数个数 - 修改arguments中的值,变化会自动反映到命名参数中。但arguments和命名参数并不属于同一个内存空间。
function paratry(num1, num2) { console.log('original: ' + num1); arguments[0] = 10; console.log('after modify arguments: ' + num1); console.log('original: ' + arguments[1]); num2 = 20; console.log('after modify num2: ' + arguments[1]); } paratry(1, 2); /* original: 1 after modify arguments: 10 original: 2 after modify num2: 20 */
- arguments对象的长度有传入的参数个数决定,不由命名参数的个数决定
- 没有传递值的参数被赋予undefined。
-
函数重载
由于JS中函数的参数可以随机表示,所以不存在函数签名(参数的类型和数量),因此也不存在函数重载
如果在JS中定义了两个名字相同的函数,则该名字只属于后定义的函数