aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 36386|回复: 16

aardio,JavaScript,PHP 语法与常用函数对比

[复制链接]

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 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

查看全部评分

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2013-1-25 16:25:47 | 显示全部楼层
函数说明PHPaardioJavascript
连接操作符一个圆点两个加号
(与引号连接时可省略为一个加号)
一个加号
连接__string.concat()
//支持任意个参数,允许参数为null
String.concat()
截取substr()string.slice()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()console.log()document.write()
格式化回显printf()console.printf()__

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

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


42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2013-1-25 16:26:19 | 显示全部楼层
函数说明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正则函数手册

42

主题

628

回帖

3765

积分

版主

积分
3765
 楼主| 发表于 2013-1-25 16:26:52 | 显示全部楼层
您可能会发现,这三种语言数组的函数名、用法都惊人的类似:

函数说明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. import console
  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

主题

112

回帖

922

积分

三级会员

积分
922
发表于 2013-1-25 16:31:24 | 显示全部楼层
楼主用心了,感谢!

52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
发表于 2013-1-25 21:53:50 | 显示全部楼层
感谢整理~

12

主题

164

回帖

1058

积分

四级会员

积分
1058
QQ
发表于 2013-1-25 22:15:28 | 显示全部楼层
感谢整理

2

主题

39

回帖

301

积分

培训班

积分
301
发表于 2013-1-25 22:15:34 | 显示全部楼层
很好,三种语言一起了解。
希望接触过web编程的朋友都来用aardio,用了才知道相见恨晚。

47

主题

131

回帖

1167

积分

荣誉会员

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

0

主题

30

回帖

418

积分

二级会员

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

0

主题

2

回帖

19

积分

新手入门

积分
19
发表于 2013-2-6 10:44:50 | 显示全部楼层
楼主辛苦了, 这个真的很有用!

0

主题

12

回帖

154

积分

一级会员

积分
154
发表于 2013-3-1 17:38:40 | 显示全部楼层
感谢楼主的热心整理.

0

主题

18

回帖

104

积分

一级会员

积分
104
发表于 2013-3-3 20:48:11 | 显示全部楼层
辛苦啦,谢谢!

10

主题

61

回帖

493

积分

新手入门

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

0

主题

8

回帖

75

积分

培训班

积分
75
发表于 2013-5-1 04:15:23 | 显示全部楼层
此帖必顶!太方便了,表示我PHP学的也不是很好,这样一举两得
谢谢楼主

0

主题

33

回帖

276

积分

二级会员

积分
276
发表于 2013-10-31 11:06:31 | 显示全部楼层
这个要认真的阅读

0

主题

30

回帖

344

积分

培训班

积分
344
QQ
发表于 2014-7-14 07:37:26 | 显示全部楼层
楼主分析的很详细啊。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-1-13 15:46 , Processed in 0.084329 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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