te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Can't set property to object - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Can't set property to object - Stack Overflow

programmeradmin3浏览0评论
var data = {};


....

data[someprop][someotherprop] = 'bla bla'

I get

Uncaught TypeError: Cannot read property ... of undefined and Cannot set property of...

Yes, the object doesn't have these properties ..yet, but I'm setting them in that line where I get the error lol. So what's up with that?

var data = {};


....

data[someprop][someotherprop] = 'bla bla'

I get

Uncaught TypeError: Cannot read property ... of undefined and Cannot set property of...

Yes, the object doesn't have these properties ..yet, but I'm setting them in that line where I get the error lol. So what's up with that?

Share Improve this question asked Mar 30, 2012 at 10:25 ellabeautyellabeauty 2,5993 gold badges22 silver badges25 bronze badges 2
  • 1 I think the problem is that you're trying to set a property inside an object that is itself a property that doesn't exist yet. What happens if you try creating someprop on one line then setting someotherprop in that? – Anthony Grist Commented Mar 30, 2012 at 10:27
  • please show the actual code. Also, setting an property in a property that does not exist yet will not work. You will have to set someprop first – Rene Pot Commented Mar 30, 2012 at 10:27
Add a ment  | 

5 Answers 5

Reset to default 6

You are trying to assign a property to an object that doesn't exist, running that statement is equivalent to

data.someprop.someotherprop the parser won't automatically create data.someprop for you, hence the error.

You have to initialize someprop

data.someprop = {};
data['someprop']['someotherprop'] = 'gw ganteng';

You need to set the properties in diffrent steps like this:

var data = {};


data[someprop] = {}; 
data[someprop][someotherprop] = 'bla bla';

The object data will not have a property named "someprop" before you asssign it.

var data = {};
data[someprop] = {someotherprop:'bla bla'};

otherwise data[someprop] will be undefined

if someprop and someotherprop are variables, Richard D's answer is correct, if they are hardcoded strings, you could write your code like this:

var data = {someprop:{someotherprop: 'value'}};

if, however, they are values stored in variables, and you really - really want to cram everything into a single line, try something like this:

var data = {window.someprop : {window.someotherprop: 'value'}};

where window can be replaced by any object, if the someprop value is itself a property of an object:

var data = {someForm.name : { formElement.name : formElement.value}};

Or jQuery objects, since your tag suggest you're using jQuery:

var data= {$('#formId').attr('name'):{$('#formSelect').attr('name'): $('#formSelect').val()}};

Note: the jQuery example is not to be remended, as the id selector is used twice on the same element. jQuery will scan the DOM-tree twice, so you're better of storing your that #formSelect element in a variable somewhere.

You need to create data[someprop] first:

var data = {};
data[someprop] = {};
data[someprop][someotherprop] = 'bla bla'

http://jsfiddle/infernalbadger/zXETB/

发布评论

评论列表(0)

  1. 暂无评论