Dojo 语法精讲
黄诚 整理
QQ 群: 65643887
第一句话 分号 ;
;(function(){
这是出现在 dojo.js 文件中的第 一句话。
它是来在每条语句结尾使用,表示语句结束的符号,其实有时候可能省略分号,解释器通常能正确识别 JavaScript 语句并执行。在 ECMAScript 标准 中,分号即使一个可选的符号来表示语句的结束。
虽然可选,但应该意识到这是为了方便非专业用户而准备的。因此在使用 JavaScript 开发专业的程序时,应该在每条语句的结束加上分号,这可以保证程序有良好的结构而且避免了一些不可预 知的错误:举例下面的就是由于省略了分号导致产生语法错误。
var a=1
/(b+)/.exec(“abbbc”)
alert(RegExp.$1)
这段代码第一行声明了一个变量并赋值为 1 ,第二行用正则表达式 提取一个字符串中的连续的 b 字符,第三行输出提取的字符串。尽管代码看上去正确,但执行时却会提示语法错误,原因在于第一行没 有以分号结尾,于是解释器继续向下解析,看能否和上一行形成合法的语意,当遇到斜杠 ”/” 时,解释器会认为这 是一个除法符号,因为它能够跟上一行后面形成合法的语意,但在继续解释第二行时则会发生错误,所以应该在第一行结尾上加上分号。告诉解释器语句已经结束。
dojo 全局变量的定义方 法。
(function(){
…
if(typeof dojo == "undefined"){
this.dojo = {
_scopeName: "dojo",
_scopePrefix: "",
_scopePrefixArgs: "",
_scopeSuffix: "",
_scopeMap: {},
_scopeMapRev: {}
};
}
var d = dojo;
….
})();
typeof 操作符号来获取一个变量所包含数据的类型,其语法为
typeof( 变量名或常量 )
例如:
var a = 1;
var b = 'true';
alert(typeof(a));
alert(typeof(b));
alert(typeof(dojo));
JavaScript 中一共有 9 种数据类型,分别是: | |
未定义 | Undefined |
空 | Null |
布尔 | Boolean |
字符串 | String |
数值 | Number |
对象 | Object |
引用 | Reference |
列表 | List |
JavaScript 中 的对象其实就是属性(方法)的一个集合,并没有严格意义上类的概念。所以它提供一个简单的方式类创建对应,即大括号 ({}) 语法:
{
property1:statement,
property2:statement2,
…
propertyN:statementN
}
通过大括号括住多个属性或方法及其定义(这些属性或方法用逗号割开),来实现对象的定义,这段代码就 直接定义个具有 n 个属性或方法的对象,其属性名和其定义之间用冒号(:)隔开。
this.dojo = {
_ scopeName : "dojo",
_scopePrefix: "",
_scopePrefixArgs: "",
_scopeSuffix: "",
_scopeMap: {},
_scopeMapRev: {}
};
// 调用 dojo 对象的属性 scopeName
alert(dojo. scopeName);
匿名函数 定义语法。
正常的函数定义为:
function functionName([arguments]){
Javascript statements
[return expression]
}
其中的 functionName 可以省略,成为匿名函数。 一般定义匿名函数为 如下:
var max = function(a, b){
if(a>b) return a;
return b;
}
因为没有函数名称要使用它得直接定义一个变量传入结果。
但 dojo 定义的格式如下:
(function(){
var mp = dojo.config["modulePaths"];
if(mp){
for(var param in mp){
dojo.registerModulePath(param, mp[param]);
}
}
})();
没有直接用变量调用而是通过全局变量 dojo 进行操作。
它外面的 (function(){})(); 语法表示一个匿名函数的定义。
var iii = (function(a,b){return a+b;})(1,2);
alert(iii);
后面的括号 (1,2) 表示创建完后立 即进行这个函数调用。结果是弹出 3 的结果。
iii 是表示返回的值, 而不是创建的函数,因为括号 ”(“ 比等号 ”=” 有更高的优先级。
这是为了在很长的代码段中进行模块化设计或者想避免命名冲突,这是一个不错的解决方法。
函数定义
函数定义有好几种。一种如下:
var func2 = function(…){…};
而 dojo 定义 isString 函数定义 方法如下:
dojo.isString = function(/*anything*/ it){
// summary:
// Return true if it is a String
return !!arguments.length && it != null && (typeof it == "string" || it instanceof String); // Boolean
}
理解上面的语法,对 dojo 的调用也就没有什 么障碍了。