搜索
查看: 12065|回复: 16

[其他] aardio,Javascript,PHP语法、常用函数对比

  [复制链接]

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2013-1-25 16:25:07 | 显示全部楼层 |阅读模式
《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可以将注释作为字符串用于赋值语句中,例如:
var str = /*
这是一个字符串
*/

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语句且强调模块化、标准化,所以在调用这些基础函数时一般都会写明函数所属的名字空间。




评分

参与人数 2专家分 +100 银币 +160 收起 理由
wudijushi + 60 赞一个!
wznjsy + 100 + 100

查看全部评分

回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
 楼主| 发表于 2013-1-25 16:25:47 | 显示全部楼层

aardio,Javascript,PHP常用字符串函数对比

函数说明PHPaardioJavascript
连接操作符一个圆点两个加号
(与引号连接时可省略为一个加号)
一个加号
连接__string.concat()
//支持任意个参数,允许参数为null
String.concat()
截取substr()string.sub()String.slice() String.substring() String.substr()
获取字符$str{位置}
$str[1]
//建议是用花括号消除歧义
str[[位置]]String.charAt(位置)
获取字节码__str[位置]String.charCodeAt(位置)
转换为字符串strval( 对象 )tostring(对象)Object.toString()
转换为字节码chr(字符串)string.unpack(字符串)String.charCodeAt(位置)
数值转换为字符ord(字节码)string.pack(字节码)
ustring.fromCharCode(Unicode代码)
String.fromCharCode(Unicode代码)
String.fromCodePoint(Unicode代码)
拆分数组explode()  string.split()
String.split()
合并数组implode() join()string.join()Array.join()
清除尾部空格rtrimstring.trimright()__
清除头部空格ltrimstring.trimleft()__
清除首尾空格trimstring.trim()__
转为小写strtolower()string.lower()String.toLowerCase()
转为大写strtoupper()string.upper()String.toUpperCase()
重复生成字符串str_repeat()string.repeat()__
反转字符串strrev()string.reverse()__
标记迭代器strtok()ustring.tokenize()__
查找任意字符strpbrk()string.indexAny()__
反向查找任意字符__string.lastIndexAny()__
查找字符串strpos()string.indexOf() String.indexOf()
反向查找字符串strrpos()string.lastIndexOf() String.lastIndexOf()
替换str_replace()string.replace() String.replace()
模式匹配preg_match()string.match() String.match()
模式匹配查找 string.find() String.search()
判断尾部字符串__string.endWith()__
判断头部字符串__string.startWith()__
比较指定长度字符串strncmp
__
忽略大小写比较strcasecmp()string.cmp()__
二进制比较字符串strcmp()str == str2str == str2
移除HTML标记strip_tags()string.html.toText()__
CRC32crc32()string.crc32()__
MD5md5()crypt.md5()__
SHA1sha1()crypt.sha1()__
回显echo(),print()io.print()document.write()
格式化回显printf()console.printf()__

Javascrit字符串函数手册      PHP字符串函数手册        aardio字符串函数手册

注意aardio字符串查找替换函数默认支持模式匹配
模式匹配快速入门


回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
 楼主| 发表于 2013-1-25 16:26:19 | 显示全部楼层

aardio,Javascript,PHP常用正则表达式函数对比

函数说明PHPaardioJavascript
匹配preg_matchpreg().match()stringObject.match()
匹配并返回数组__preg().exec()new RegExp().exec()
全局匹配preg_match_all()preg().gmatch()___
返回匹配数组preg_grep()preg().grep()__
正则拆分preg_split()preg().split()stringObject.split()
替换preg_replace()preg().replace()stringObject.replace()
测试匹配__preg().test()new RegExp().test()
查找位置__preg().find()stringObject().search()

Javascrit正则函数手册       PHP正则函数手册         aardio正则函数手册
回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
 楼主| 发表于 2013-1-25 16:26:52 | 显示全部楼层

aardio,Javascript,PHP常用数组函数对比

您可能会发现,这三种语言数组的函数名、用法都惊人的类似:

函数说明PHPaardioJavascript
连接多个数组array_merge()table.concat()arrayObject.concat()
数组合并为字符串joinstring.join()arrayOjbect.join()
数组尾部弹出array_pop()table.pop()arrayOjbect.pop()
数组尾部压入array_push()table.push()arrayOjbect.push()
数组头部移出array_shift()table.shift()arrayOjbect.shift()
数组头部移入array_unshift()table.unshift()arrayOjbect.unshift()
移除替入array_splice()table.splice()arrayOjbect.splice()
数组截取array_slice()table.slice()arrayOjbect.slice()
数组反向array_reverse()table.reverse()arrayOjbect.reverse()
获知取数组长度count()#数组对象数组对象.length


Javascrit数组函数手册  PHP数组函数手册  aardio数组函数手册


在aardio中循环遍历数组演示:
  1. import console

  2. var array = {
  3.          1;2;3;
  4.          a = "测试";
  5.          x = 123;
  6.          y = 456;
  7. }

  8. //循环遍历输出数组值
  9. for(k,v in array){
  10.         console.log( "k = " + k, "v = " + v )
  11. }
复制代码
PHP中的关联组与aardio中的table基本类似,即可以包含顺序数组(数值键),
也可以包含关联数组(其他非数值键值对、或稀疏数组),在PHP中循环遍历数组演示:
  1. io.open()
  2. import php;

  3. //PHP代码
  4. phpcode =/*  
  5. $array = array('red','blue','green','yellow',
  6.         'football' => 'good',  
  7.     'swimming' => 'very well',  
  8.     'running'  => 'not good'  
  9. );

  10. foreach ( $array as $key => $value ){
  11.         echo "$key : $value <br />";
  12. }
  13. */  
  14. php.exec(phpcode)
复制代码
至于Javascript,数组在中括号中定义,可以是顺序数组,也可以是关联数组,
另外在花括号中定义的称为对象,对象与关联数组用法类似(关联数组本质也是对象)
在Javascript中循环遍历数组演示:
  1. import console;
  2. import web.script

  3. //创建一个Javascript脚本虚拟机
  4. var vm = web.script( )  
  5. vm.external = {
  6.         log = function(...){
  7.                 console.log(...)
  8.         }

  9. }

  10. var javascript = /**

  11.         var list = [1, 2, 3, 4, 5 ];
  12.         //遍历顺序数组
  13.         for(var i = 0, l = list.length; i < l; i++) {
  14.             external.log(list[ i ]);
  15.         }
  16.         
  17.         var arr = {"one":"valOne","two":"valTwo"};
  18.         arr["one"] = "valOne";
  19.         arr.one = "valOne";
  20.         
  21.         //遍历数组
  22.         for (key in arr) {
  23.             external.log(key,arr[key]);
  24.         }
  25. **/
  26. vm.AddCode(javascript); //加载脚本

  27. console.pause();
复制代码

javascript的for in 语句一般被认为是有缺陷的语法,应慎用。

回复

使用道具 举报

15

主题

132

帖子

937

积分

三级会员

Rank: 4

积分
937
发表于 2013-1-25 16:31:24 | 显示全部楼层

楼主用心了,感谢!

楼主用心了,感谢!
回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2013-1-25 21:53:50 | 显示全部楼层

感谢整理~

感谢整理~
回复

使用道具 举报

12

主题

176

帖子

1062

积分

四级会员

Rank: 6Rank: 6

积分
1062
QQ
发表于 2013-1-25 22:15:28 | 显示全部楼层

感谢整理

感谢整理
回复

使用道具 举报

2

主题

43

帖子

301

积分

培训班

积分
301
发表于 2013-1-25 22:15:34 | 显示全部楼层

很好,三种语言一起了解。 希望接触过web编程的朋友都来用aardio,用了才知道相见恨晚。

很好,三种语言一起了解。
希望接触过web编程的朋友都来用aardio,用了才知道相见恨晚。
回复

使用道具 举报

47

主题

178

帖子

1167

积分

荣誉会员

Rank: 8Rank: 8

积分
1167
发表于 2013-1-26 01:42:12 | 显示全部楼层

感谢整理

感谢整理
回复

使用道具 举报

0

主题

30

帖子

418

积分

二级会员

Rank: 3Rank: 3

积分
418
发表于 2013-2-6 02:29:06 | 显示全部楼层

楼主有心!

楼主有心!
回复

使用道具 举报

0

主题

3

帖子

18

积分

新手入门

Rank: 1

积分
18
发表于 2013-2-6 10:44:50 | 显示全部楼层

楼主辛苦了, 这个真的很有用!

楼主辛苦了, 这个真的很有用!
回复

使用道具 举报

0

主题

12

帖子

154

积分

一级会员

Rank: 2

积分
154
发表于 2013-3-1 17:38:40 | 显示全部楼层

感谢楼主的热心整理.

感谢楼主的热心整理.
回复

使用道具 举报

0

主题

18

帖子

104

积分

一级会员

Rank: 2

积分
104
发表于 2013-3-3 20:48:11 | 显示全部楼层

辛苦啦,谢谢!

辛苦啦,谢谢!
回复

使用道具 举报

10

主题

71

帖子

493

积分

新手入门

积分
493
发表于 2013-3-11 15:08:23 | 显示全部楼层

支持啊!!!!!

支持啊!!!!!
回复

使用道具 举报

0

主题

8

帖子

75

积分

培训班

积分
75
发表于 2013-5-1 04:15:23 | 显示全部楼层

此帖必顶!太方便了,表示我PHP学的也不是很好,这样一举两得 谢谢楼主

此帖必顶!太方便了,表示我PHP学的也不是很好,这样一举两得
谢谢楼主
回复

使用道具 举报

0

主题

34

帖子

276

积分

二级会员

Rank: 3Rank: 3

积分
276
发表于 2013-10-31 11:06:31 | 显示全部楼层

这个要认真的阅读

这个要认真的阅读
回复

使用道具 举报

0

主题

31

帖子

340

积分

培训班

积分
340
QQ
发表于 2014-7-14 07:37:26 | 显示全部楼层

楼主分析的很详细啊。

楼主分析的很详细啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-6-25 10:21 , Processed in 0.093750 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表