JavaScript 实现是由以下 3 个不同部分组成的:
核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM)
1、数据类型
typeof 运算符
对变量或值调用 typeof 运算符将返回下列值之一:
undefined - 如果变量是 Undefined 类型的
boolean - 如果变量是 Boolean 类型的
number - 如果变量是 Number 类型的
string - 如果变量是 String 类型的
object - 如果变量是一种引用类型或 Null 类型的
2、Object 对象
Object 对象具有下列属性:
constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。
Object 对象还具有几个方法:
hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))
IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。
PropertyIsEnumerable
判断给定的属性是否可以用 for...in 语句进行枚举。
ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
ValueOf()
返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
注释:上面列出的每种属性和方法都会被其他对象覆盖。
3、实例对象
声明和实例化
对象的创建方式是用关键字 new 后面跟上实例化的类的名字:
var oObject = new Object();
本地对象
本地对象就是JavaScript定义的类(引用类型)。它们包括:
Object
Function
Array
String
Boolean
Number
Date
RegExp
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
4、this、call、apply
4、函数
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。
函数的基本语法是这样的:
function functionName(arg0, arg1, ... argN) {
statements
}
arguments 对象
检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可
Function 对象(类)
用 Function 类直接创建函数的语法如下:
var obj = new function(arg1, arg2, ..., argN, function_body)
在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。
5、匿名函数
(function(){
})()
用处:加载后执行,私有函数不对外开放;
var fn = (function () {
var basket = [];
function privateMethod() {
console.log("匿名函数已执行");
}
return {
publicMethod: function () {
privateMethod();
}
};
}())
----------------------------------------------
(function (window, factory) {
//执行
window.lib = factory();
})(this, function () {
//主体函数
var pluns = {
output: function (b) {
return b;
}
};
return pluns;
})
//调用
var put = lib.output('msg');
console.log(put);
CommonJS框架:
第一步:
var moudules = {}; //对象字面量
function define(name, deps, impl) {
for (var i = 0; i < deps.length; i++) {
deps[i] = moudules[deps[i]];
}
moudules[name] = impl.apply(impl, deps);
console.log(moudules[name]);
}
moudules.get = function(name) {
return moudules[name];
}
define('bar', [], function () {
function hello(who) {
return 'Let me introduce:' + who;
}
return {
hello: hello
}
});
var bar = moudules.get('bar');
console.log(bar.hello('nihao'));
第二步
(function(define){
define(function () {
console.log("匿名函数已执行");
});
})(typeof define == "function" ? define : function (factory) { factory()});
fn.publicMethod();
6、构造函数
7、原型(prototype)
DOM(文档对象模型)
Document
Body
Style
……
BOM(浏览器对象模型)
Window 对象
Navigator 对象
Screen 对象
History 对象
Location 对象
HTML 对象
<body>
<a>
……
所有HTML树节点
封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
聚集 - 把一个对象存储在另一个对象内的能力
继承 - 由另一个类(或多个类)得来类的属性和方法的能力
多态 - 编写能以多种方法运行的函数或方法的能力
对象字面量
Facade模式
var module = (function () {
var _private = {
val: 5,
get: function () {
console.log(this.val);
},
set: function (val) {
this.val = val;
},
run: function () {
console.log('running');
},
jump: function () {
console.log('jumping');
}
};
return {
facade: function (args) {
_private.set(args.val);
_private.get();
if (args.run) {
_private.run();
}
}
}
}());
//调用
module.facade({ run: true, val: 10 });
module
exports
require
global