JavaScript对象可以分为原生对象(内置对象)和宿主对象两种:
- 原生对象:也叫内置对象,JS语言中预定义的对象,由ECMAScript标准定义独立于宿主环境,因此兼容性较好;
- 宿主对象:由JS运行环境比如浏览器提供的对象,由于宿主对象由浏览器厂家自己定义因此早期版本存在较多兼容问题,主要包括BOM对象和DOM对象两种;
1. ECMAScript原始类型与引用类型
ECMAScript原始类型是相对与引用类型而言,同时ECMAScript的变量也有两种:原始值和引用值。
原始值是存储在栈(stack)中的简单数据段,是真实地址;而引用值是存储在堆(heap)中的对象,是指向数据真实地址的指针。
原始类型只有五种:
- Undefined:只有一个值即undefined,比如var temp; 这个时候temp的值就是Undefined类型,值的内容是undefined;如果函数无返回值也是undefined;
- Null:只有一个值null,Undefined对象由Null对象派生而来,两者计算上相等但代表意义不同,null表示尚未存在的对象,相当于占位符;
- Number:可以表示32位的整数也可以表示64位的浮点数;可以定义八进制/十六进制/科学计数法;特殊值:Number.MAX_VALUE/MIN_VALUE,NaN;
- String:没有固定大小的原始类型,特殊字符如\n(换行),\r(回车),\t(制表符),\b(空格),\o001(八进制),\x01(十六进制),\u0001(Unicode字符);
- Boolean:两个值true和false,可以与1和0互换;
// 1. Null与Undefined
alert(null == undefined); // 输出true
// 2. Number
alert(isNaN("new")); // 输出true
alert(isNaN("123")); // 输出false
// 3. 转换函数
// 转换成字符串有两种方法: String()函数与toString()方法
var num = 10;
alert(num.toString()); // 输出 "10"
alert(num.toString(2)); // 输出 "1010"
alert(num.toString(16)); // 输出 "A"
alert(String(null)); // 输出 "null"
alert(null.toString()); // 报错
// Number函数
alert(Number(undefined)); // 输出 NaN
alert(Number(null)); // 输出 0
alert(Number("1.2")); // 输出 1.2
alert(Number("1.2.2")) // 输出 NaN
alert(Number(new Object())) // 输出 NaN
// Boolean函数
alert(Boolean("")); // 输出 0
// 数值友好转换函数: parseInt/parseFloat
alert(parseInt("12345asw")); 输出 12345
alert(parseInt("red")); 输出NaN
2. ECMAScript原生对象
所有对象默认具有属性:contructor、prototype,具有方法:toString()、toSource()、valueOf()(返回对象的原始值)
Global对象具有特殊性
在JavaScript中不属于任何其他对象的属性和方法,都属于它的属性和方法。
所以,事实上,并不存在全局变量和全局函数;所有在全局作用域定义的变量和函数,都是 Global 对象的属性和方法。
因为 JavaScript没有定义怎么调用 Global 对象,所以,Global.属性或者 Global.方法()都是无效的。(Web 浏览器将 Global 作为 window 对象的一部分加以实现)
对象名称 | 重要方法 | 重要属性 | 其它 |
Number | toFixed: 转成字符串 toPrecision: 转成指定位数
| NaN MAX_VALUE MIN_VALUE POSITIVE_INFINITY NAGATIVE_INFINITY | var num = new Number(13.58); num.toFixed(1); // 结果为13.6 num.toPrecision(6); // 结果为13.5800 |
String | indexOf: 字符串搜索 concat: 连接字符串 charAt: 返回指定位置字符串 charCodeAt: 返回Unicode search: 按正则搜索 replace: 按正则/字符串替换 split: 切割字符串成数组 substring: 截取字符串 toLowerCase: 变成小写 toUpperCase: 变成大写 | length | 1. 按字符串搜索:str.indexOf("World") 2. 按正则模式搜索:str.search(/World/) |
Boolean | 无 建议使用原始值 | 无 | var falseObj = new Boolean(false); var result = falseObj && true; // 结果为true // 原因是falseObj计算的是它自身而不是原始值 |
Object | hasOwnProperty isPropertyOf | 无 | 1. 遍历对象方法:for (item in items) {...} 2. 原始方法:Object.keys()/values()/freeze()等 3. 其它所有的对象都是继承的Object类 |
Array | pop: 从尾部删除 shift: 从删除头部 push: 加在尾部 unshift: 加在头部 concat join slice: 不修改原数组 splice: 修改原数组 | length
| 1. arrObj.slice(start, end); // 作用: 返回数组部分值,原数组不变 // start: 必需, 包含下标元素 // end: 可选, 结束下标(不包含下标元素) 2. arrObj.splice(index, howmany, item1...itemx); // 作用: 向/从数组添加/删除元素,返回删除元素 // index: 必需, 整数,添加/删除元素的位置 // howmany: 必需, 如果为0代表添加元素 // itemx: 可选, 向数组中添加的元素 |
Date | Date: 返回完整日期时间 getDate: 返回日 getMonth: 返回月 getFullYear: 返回年 getTime: 时间戳(毫秒) Date.parse(): 静态函数, 指定时间的毫秒数 Date.UTC(): 静态函数,根据世界时间返回毫秒数 | | var milisecs = Date.parse('Jul 9 2009'); // 结果:1247068800000 var milisecs = Date.UTC(2009, 9, 7); // 结果:1247068800000 |
RegExp | compile: 编译正则表达式 exec: 返回匹配结果 test: 返回是否匹配 | global(g标记) ignoreCase(i标记) multiline(m标记) source(源文本) lastIndex | .: 匹配任意字符除了换行和行结束符 \w与\W: 匹配单词与非单词 \d与\D: 匹配数字与非数字字符 \s与\S: 空白字符与非空白字符 \0: 匹配NUL字符(字符串结束符) \127与\x24与\u1274: 八进制/十六进制/Unicode (blue|green): 指定匹配 new RegExp(/is(?=ni)/); // 匹配It is nihao new RegExp(/is(?!=ni)/); // 不匹配It is nihao |
Function | | length: 参数个数 | var sayHI = new Function(num, "alert(num)"); |
Global | 内置对象, JS实现提供的, 在ES程序执行前已经存在了,不需要自己创建。 parseInt/parseFloat eval/isNaN encodeURI/decodeURI encodeURIComponent (对非标准字符编码) decodeURIComponent | undefined null NaN Object Function Array | var val = 8; // 默认属于Global对象属性 console.log(Global.val); // 报错 console.log(window.val); // 结果为8 val == Global.undefined; // 报错 val == undefined; // 不报错 eval('var num=5'); console.log(num); // 结果为5 |
Math | abs: 绝对值 ceil: 上舍入 floor: 下舍入 round: 四舍五入 pow: 返回数值幂值 random: 0.1 - 1.0随机值 | PI E LN2 LN3 | 1. Math.ceil(-5.1); // 结果为-5 2. Math.floor(-5.1); // 结果为-6 3. Math.pow(2, 3); // 结果为8 4. 10+random()*20; // 返回10-30之间随机值 |
Error | | name message | try { ... } catch(err) {console.log(err.message)} |
3. BOM浏览器对象
4. DOM文档对象
对象名称 | 重要方法/属性 | |
Document | document.write() document.writeln() document.URL | document.title document.referrer document.open() |
元素对象 | document.getElementById('id').id document.getElementById('id').parentNode document.getElementById('id').innerHTML document.getElementById('id').children | document.body.className document.body.addEventListener() document.body.appendChild() |
属性对象 | document.getElementByTagName("H1")[0].getAttributeNode("style").value = "color: green"; document.getElementByTagName("button")[0].attributes.length; document.getElementByTagName("button")[0].attributes.removeNamedItem("type"); document.getElementByTagName("button")[0].attributes[0].name; var attrs = document.getElementByTagName("button")[0].attributes; | |
事件对象 | var obj = document.getElementById('id'); obj.onlick() = function() {}; obj.onmouseup() = function() {}; obj.onmousedown() = function() {}; | obj.onkeyup() = function() {}; obj.onkeypress() = function() {}; obj.onkeydown() = function() {}; |