《 aardio,JavaScript,PHP 基础语法比较 》
http://bbs.aardio.com/doc/aau-php-js.html
关于javascript、aardio的语法对比再补充几点:
1 、aardio中owner是调用函数时的一个隐藏参数,而aardio中的this是类中的一个闭包变量。
一般情况下this与owner指向同一个对象,但一个函数作为成员函数调用时 - owner参数将会动态指向函数名前面的所有者对象(类似js中的this参数)。所以javascript的this参数相当于aardio中的owner参数。
2、aardio中的var语句定义的局部变量拥有块级作用域。而javascript中var语句定义的变量没有块级作用域(这被认为是js语言一个较大的缺陷,ES6提供了let用于解决这个问题)。另外,javascript的var语句用在函数外部时定义的是全局变量(aardio中var语句在任何地方定义的都是正常的、语义一致的局部变量)。
javascript中经常要写一堆代码创建匿名函数并执行自身来模仿块级作用域,例如:
(function(){
var x = ...
})()
虽然在aardio中你也可以这样写 - 但这是不必要的,因为aardio直接用 { } 创建一个语句块就可以了。
3、js中for计数循环中的计数变量始终指向同一地址,不适合作为闭包变量使用。
而aardio的for循环中计数变量在每次循环时指向不同的副本,因此可以作为闭包变量使用。
aardio代码示例:
import console;
var f = {}
for(i=1;4;1){
i++;
f[ i ]= function(){
console.log(i);
}
}
f[2]();
f[4]();
console.pause();
4、javascript在单引号、双引号中可包含转义字符串。
而aardio在单引号中可包含转义字符串,双引号和反引号中包含的是普通字符串(不使用转义符)。
另外aardio可以将注释作为字符串用于赋值语句中,例如:
javascript 中引号内的字符串不能直接换行(ES6可用反斜杠续行,也可以用反引号支持多行字符串),
而aardio在所有引号内都可以写多行字符串,其中双引号内换行解析为'\n',而单引号内的换行被忽略。使用段注释表示字符串时 - 换行解析为'\r\n'。
5、javascript中通常会直接通过这些字符串、数值的成员函数去处理对象自身。
但是aardio中字符串、数值这些都是单纯的数据 - 并不提供成员函数,操作这些数据会统一使用标准库函数。
例如javascript中替换字符串的代码如下:
var str = "abcdef".replace("cd","--");
而aardio中替换字符串的代码是这样: var str = string.replace("abcdef","cd","--");
实际上aardio要实现JS那样的写法是很容易的,但aardio支持namespace、import语句且强调模块化、标准化,所以在调用这些基础函数时一般都会写明函数所属的名字空间。
|