<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Designsor &#187; javascript对象字面量</title>
	<atom:link href="http://www.designsor.com/tag/javascript%e5%af%b9%e8%b1%a1%e5%ad%97%e9%9d%a2%e9%87%8f/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.designsor.com</link>
	<description>End Web Developer&#039;s Blog</description>
	<lastBuildDate>Sat, 14 Jan 2012 02:35:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>关于javascript对象字面量</title>
		<link>http://www.designsor.com/2010/05/28/jsobjectstr/</link>
		<comments>http://www.designsor.com/2010/05/28/jsobjectstr/#comments</comments>
		<pubDate>Fri, 28 May 2010 14:22:12 +0000</pubDate>
		<dc:creator>xiaojue</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[javascript对象字面量]]></category>
		<category><![CDATA[toSource()]]></category>

		<guid isPermaLink="false">http://www.designsor.com/?p=779</guid>
		<description><![CDATA[啊，我不是专业程序员，我英文烂到不行。嗯……基础差劲，经验一般~嗯，群里给我结论…… 个人我也很同意[使劲点头],但是我绝对自信的是自己的歪门邪道……也就是野路子。嗯，遇到问题会用自己知识范围内的所知全力解决……唔。也就是所谓的实战派，实用派，最意外忍者和野路子了。 好了，扯淡结束，下个话题。关于javascript对象字面量，到底是什么东西？看下下面的例子代码： var a={ &#8216;m&#8217;:'b&#8217;, &#8216;a&#8217;:'c&#8217;, &#8216;c&#8217;:&#8217;1&#8242; }; 这里的a,被定义了成了一个对象，他有3个属性m,a,c值则就是b,c,1了。这就是javascript中的对象，键对值的。然后我们如果要访问他们，如果知道属性名则这样访问a['m']//返回b;而我们当然开始不知道对象里有什么。就需要使用for in循环了比如for(var k in a){a[k];//以此返回b,c,1;}k则是遍历的键名了。 唔……昨天有个傻呸在群里说：他想不用循环又想得到一个对象字面量的第一个键名和值…… 好吧，我们想了好久，最终我这个野路子想出方法啦……嗯，其实我也是现找的一个javascript对象属性外加一个野想法…… 嗯，a这个对象我们不知道内部有什么，我们又不可以用循环，最开始的思路大家都差不多，嗯，匹配？或者……啊，对，总之要把他这个对象转换成可以操作的一个什么东西，toString();？不行，caller？也不行……额，我找了挺久发现了这么一个属性……toSource() ;方法……嗯，返回对象内部的源码，哇嘞NB，因为我的手册里没有这个属性- -&#124;&#124;所以之前一直不知道有这么个方法。 既然这样实现起来就容易了： var a={ &#8216;m&#8217;:'b&#8217;, &#8216;a&#8217;:'c&#8217;, &#8216;c&#8217;:&#8217;1&#8242; }; function objfirstparam(obj){ var str=obj.toSource(); var re = /(?!{)[w](?=:)/; return str.match(re).toString(); } alert(objfirstparam(a)); alert(a[objfirstparam(a)]); 嗯，先读出对象里的源码，我判断了，就是str类型，那么OK了，根据读出来的str写个正则匹配下，不用循环匹配字符串特定的第一个键名还是比较容易的。嗯，要求符合，问题解决……我是野路子…… 这只是个思路，基本和实际应用关系不大，可谁知道呢，也许以后没准还能真可以用上，特此记录一下（PS：最近迷上了正则表达式，哇嘞真的是jser的一把瑞士军刀，NB，建议大家多多练习使用，增强火力吧。）]]></description>
			<content:encoded><![CDATA[<p>啊，我不是专业程序员，我英文烂到不行。嗯……基础差劲，经验一般~嗯，群里给我结论……</p>
<p>个人我也很同意[使劲点头],但是我绝对自信的是自己的歪门邪道……也就是野路子。嗯，遇到问题会用自己知识范围内的所知全力解决……唔。也就是所谓的实战派，实用派，最意外忍者和野路子了。</p>
<p>好了，扯淡结束，下个话题。关于javascript对象字面量，到底是什么东西？看下下面的例子代码：</p>
<blockquote><p>var a={<br />
&#8216;m&#8217;:'b&#8217;,<br />
&#8216;a&#8217;:'c&#8217;,<br />
&#8216;c&#8217;:&#8217;1&#8242;<br />
};</p></blockquote>
<p>这里的a,被定义了成了一个对象，他有3个属性m,a,c值则就是b,c,1了。这就是javascript中的对象，键对值的。然后我们如果要访问他们，如果知道属性名则这样访问a['m']//返回b;而我们当然开始不知道对象里有什么。就需要使用for in循环了比如for(var k in a){a[k];//以此返回b,c,1;}k则是遍历的键名了。</p>
<p>唔……昨天有个<a href="http://www.douban.com/people/Minority/" target="_blank">傻呸</a>在群里说：他想不用循环又想得到一个对象字面量的第一个键名和值……</p>
<p>好吧，我们想了好久，最终我这个野路子想出方法啦……嗯，其实我也是现找的一个javascript对象属性外加一个野想法……</p>
<p>嗯，a这个对象我们不知道内部有什么，我们又不可以用循环，最开始的思路大家都差不多，嗯，匹配？或者……啊，对，总之要把他这个对象转换成可以操作的一个什么东西，toString();？不行，caller？也不行……额，我找了挺久发现了这么一个属性……<span class="me1">toSource</span><span class="br0">() ;方法……嗯，返回对象内部的源码，哇嘞NB，因为我的手册里没有这个属性- -||所以之前一直不知道有这么个方法。</span></p>
<p>既然这样实现起来就容易了：</p>
<blockquote><p>
var a={<br />
  &#8216;m&#8217;:'b&#8217;,<br />
  &#8216;a&#8217;:'c&#8217;,<br />
  &#8216;c&#8217;:&#8217;1&#8242;<br />
};<br />
function objfirstparam(obj){<br />
var str=obj.toSource();<br />
var re = /(?!{)[w](?=:)/;<br />
return str.match(re).toString();<br />
}<br />
alert(objfirstparam(a));<br />
alert(a[objfirstparam(a)]);
</p></blockquote>
<p>嗯，先读出对象里的源码，我判断了，就是str类型，那么OK了，根据读出来的str写个正则匹配下，不用循环匹配字符串特定的第一个键名还是比较容易的。嗯，要求符合，问题解决……我是野路子……</p>
<p>这只是个思路，基本和实际应用关系不大，可谁知道呢，也许以后没准还能真可以用上，特此记录一下（PS：最近迷上了正则表达式，哇嘞真的是jser的一把瑞士军刀，NB，建议大家多多练习使用，增强火力吧。）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.designsor.com/2010/05/28/jsobjectstr/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

