V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
benzhe
V2EX  ›  JavaScript

js如何传递数组

  •  
  •   benzhe · 2011-06-27 02:21:23 +08:00 · 5948 次点击
    这是一个创建于 4905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    var h = new Array();
    h['hid'] = ‘xx’;
    h['image'] = ‘xx’;
    h['title'] = ‘xx’;
    h['description'] = ‘xx’;

    如上面这种数组,是不是必须要先转换成字符串传递?或者有什么序列化的函数可用?
    15 条回复    1970-01-01 08:00:00 +08:00
    yuest
        1
    yuest  
       2011-06-27 02:35:05 +08:00
    JSON
    楼主也混淆了 Object 和 Array
    建议认真学一下基础,读语言精粹和权威指南这两本书
    chone
        2
    chone  
       2011-06-27 09:02:59 +08:00
    这里的传递是值传递?还是指数据传递到服务器?
    supersheep
        3
    supersheep  
       2011-06-27 09:39:38 +08:00
    lz是要传到到后端还是哪里?前后端交互就只能序列化成字符串再进行。
    另外,js中的关联数组实际上就是一个对象。以上代码可以简写成如下形式:
    var h = {
    hid:'xx',
    image:'xx',
    title:'xx',
    description:'xx'
    };
    效果是一样的。
    Hyperion
        4
    Hyperion  
       2011-06-27 10:03:44 +08:00
    得用JSON的类库. json.org有下载, 具体地址是 [https://github.com/douglascrockford/JSON-js]. 但好像IE内置了JSON类库?...

    JSON.stringify()方法可以把对象序列化.

    另外, js的array也是一个object, array的下标只允许数字...

    var h = new Array(); 应该改成 var h = {};

    你的写法是给你新建的array对象添加新成员...
    zythum
        5
    zythum  
       2011-06-27 10:10:17 +08:00
    lz基本上是把js的数组和php的数组混淆了。
    在js里h['image']和h.image是一样了。这里img是h的一个属性。不是数组的值。所以这个数组还是个空的数组。lz就差异了。"我不是付了值了啊怎么没有啊(> _ <)|| ",对吧
    Hyperion
        6
    Hyperion  
       2011-06-27 10:18:23 +08:00
    js的语法其实满悲剧的, 怎么写都能过. 就好像八抬大轿拉回来的[哔][哔], 但实际撩帘子的时候会发觉里面坐着的是凤姐...

    @zythum 唷! 朱一! 早!
    chone
        7
    chone  
       2011-06-27 10:21:54 +08:00
    @Hyperion 现代浏览器都原生支持JSON,IE6,IE7什么的不支持
    chone
        8
    chone  
       2011-06-27 10:25:59 +08:00
    @Hyperion 动态语言都这样吧。。。不过可以用jsliint,closure linter这类的做语法检查。
    zythum
        9
    zythum  
       2011-06-27 10:29:02 +08:00
    @Hyperion 早,不过好像也不早了哈。
    @chone 对于IE6,IE7什么的不支持的情况,那么类库或者工具是怎么做到的呢。直接当作字符串传过来然后各种正则比对?
    zythum
        10
    zythum  
       2011-06-27 10:32:12 +08:00
    @chone @Hyperion 说白了就是s的数组和php的数组写混了。
    朱一还是蛮喜欢这种非常自由化的语法。就是js面向对象的写法很多人接受不了。。。
    chone
        11
    chone  
       2011-06-27 10:45:28 +08:00
    @zythum https://github.com/douglascrockford/JSON-js/blob/master/json.js
    另外javascript不OOP其实也没什么,关键看习惯和场合。
    benzhe
        12
    benzhe  
    OP
       2011-06-27 11:00:59 +08:00
    @zythum @Hyperion @supersheep @chone @yuest 传递到php。的确是把js的array和object混淆了,var h=new Object后整个世界都清静了
    zythum
        13
    zythum  
       2011-06-27 11:10:23 +08:00
    @chone 貌似跟朱一想的没什么大的出入。不是oop的很多复杂的东西就不好写。每个函数的参数表会特边长什么的。
    @benzhe 下次写的时候var h=new Object()直接写h={},var h=new Array()直接写h=[],var h=new String()直接写h='',这样效率会高很多。^^
    chone
        14
    chone  
       2011-06-27 11:15:29 +08:00
    @zythum 。。。OOP不是为了减少函数参数来的吧,虽然我也喜欢用基于class的OOP方式来组织代码。
    zythum
        15
    zythum  
       2011-06-27 11:47:26 +08:00
    @chone 当然不是。。。。啦。。。。为了说话总被你抓把柄。。。。TAT
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2333 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:57 · PVG 08:57 · LAX 16:57 · JFK 19:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.