mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-11 00:54:06 +08:00
214 lines
15 KiB
HTML
214 lines
15 KiB
HTML
<article id="wikiArticle">
|
||
<div style="margin: 0px; padding: 0px; border: 0px; color: rgb(77, 78, 83); font-family: 'Open Sans', sans-serif; font-size: 14px; line-height: 21px; background-color: rgb(255, 255, 255);"></div>
|
||
<p><code><strong>valueOf()</strong></code> 方法返回指定对象的原始值。</p>
|
||
<h2 id="Syntax" name="Syntax">语法</h2>
|
||
<pre>object.valueOf()</code></pre>
|
||
<h3 id="返回值">返回值</h3>
|
||
<p>返回值为该对象的原始值。</p>
|
||
<h2 id="Description" name="Description">描述</h2>
|
||
<p>JavaScript调用<code>valueOf</code>方法将对象转换为原始值。你很少需要自己调用<code>valueOf</code>方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。</p>
|
||
<p>默认情况下,<code>valueOf</code>方法由<a href="Reference/Global_Objects/Object" title="Object 构造函数创建一个对象包装器。"><code>Object</code></a>后面的每个对象继承。 每个内置的核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则<code>valueOf</code>将返回对象本身。</p>
|
||
<p>JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。</p>
|
||
<table class="standard-table">
|
||
<caption>不同类型对象的valueOf()方法的返回值</caption>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col"><strong>对象</strong></th>
|
||
<th scope="col"><strong>返回值</strong></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Array</td>
|
||
<td>返回数组对象本身。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Boolean</td>
|
||
<td>布尔值。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Date</td>
|
||
<td>存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Function</td>
|
||
<td>函数本身。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Number</td>
|
||
<td>数字值。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Object</td>
|
||
<td>对象本身。这是默认情况。</td>
|
||
</tr>
|
||
<tr>
|
||
<td>String</td>
|
||
<td>字符串值。</td>
|
||
</tr>
|
||
<tr>
|
||
<td> </td>
|
||
<td>Math 和 Error 对象没有 valueOf 方法。</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>你可以在自己的代码中使用<code>valueOf</code>将内置对象转换为原始值。 创建自定义对象时,可以覆盖<code>Object.prototype.valueOf()</code>来调用自定义方法,而不是默认<a href="Reference/Global_Objects/Object" title="Object 构造函数创建一个对象包装器。"><code>Object</code></a>方法。</p>
|
||
<h3 id="覆盖自定义对象的_valueOf方法">覆盖自定义对象的 <code>valueOf</code>方法</h3>
|
||
<p>你可以创建一个取代 <code>valueOf</code>方法的函数,你的方法必须不能传入参数。</p>
|
||
<p>假设你有个对象叫 <code>MyNumberType</code>而你想为它创建一个<code>valueOf</code>方法。下面的代码为<code>valueOf</code>方法赋予了一个自定义函数:</p>
|
||
<pre><code class="language-javascript">MyNumberType.prototype.valueOf = function() { return customPrimitiveValue; };</code></pre>
|
||
<div class="line-number" style="margin: 1em 0px 0px; border: 0px; position: absolute; left: 0px; right: 0px; line-height: inherit; top: 0px; background: 0px 0px;"> </div>
|
||
<p>有了这样的一个方法,下一次每当<code>MyNumberType</code>要被转换为原始类型值时,JavaScript 在此之前会自动调用自定义的<code>valueOf</code>方法。</p>
|
||
<p><code>valueOf</code>方法一般都会被 JavaScript 自动调用,但你也可以像下面代码那样自己调用:</p>
|
||
<pre><code class="language-javascript">myNumberType.valueOf()</code></pre>
|
||
<div class="note">
|
||
<p dir="ltr"><strong style="border: 0px; margin: 0px; padding: 0px;">注意:</strong>字符串上下文中的对象通过 <a href="Reference/Global_Objects/Object/toString" title="toString() 方法返回一个表示该对象的字符串。"><code>toString()</code></a>方法转换,这与使用<code>valueOf</code>转换为原始字符串的<a href="Reference/String" title="此页面仍未被本地化, 期待您的翻译!"><code>String</code></a>对象不同。所有对象都能转换成一个“<code>[object <em>类型</em>]</code>”这种格式的字符串。但是很多对象不能转换为数字,布尔或函数。</p>
|
||
</div>
|
||
<h2 id="示例">示例</h2>
|
||
<h3 id="使用_valueOf">使用 <code>valueOf</code></h3>
|
||
<pre><code class="language-javascript">// Array:返回数组对象本身
|
||
var array = ["ABC", true, 12, -5];
|
||
console.log(array.valueOf() === array); // true
|
||
|
||
// Date:当前时间距1970年1月1日午夜的毫秒数
|
||
var date = new Date(2013, 7, 18, 23, 11, 59, 230);
|
||
console.log(date.valueOf()); // 1376838719230
|
||
|
||
// Number:返回数字值
|
||
var num = 15.26540;
|
||
console.log(num.valueOf()); // 15.2654
|
||
|
||
// 布尔:返回布尔值true或false
|
||
var bool = true;
|
||
console.log(bool.valueOf() === bool); // true
|
||
|
||
// new一个Boolean对象
|
||
var newBool = new Boolean(true);
|
||
// valueOf()返回的是true,两者的值相等
|
||
console.log(newBool.valueOf() == newBool); // true
|
||
// 但是不全等,两者类型不相等,前者是boolean类型,后者是object类型
|
||
console.log(newBool.valueOf() === newBool); // false
|
||
|
||
// Function:返回函数本身
|
||
function foo(){}
|
||
console.log( foo.valueOf() === foo ); // true
|
||
var foo2 = new Function("x", "y", "return x + y;");
|
||
console.log( foo2.valueOf() );
|
||
/*
|
||
ƒ anonymous(x,y
|
||
) {
|
||
return x + y;
|
||
}
|
||
*/
|
||
|
||
// Object:返回对象本身
|
||
var obj = {name: "张三", age: 18};
|
||
console.log( obj.valueOf() === obj ); // true
|
||
|
||
// String:返回字符串值
|
||
var str = "http://www.xyz.com";
|
||
console.log( str.valueOf() === str ); // true
|
||
|
||
// new一个字符串对象
|
||
var str2 = new String("http://www.xyz.com");
|
||
// 两者的值相等,但不全等,因为类型不同,前者为string类型,后者为object类型
|
||
console.log( str2.valueOf() === str2 ); // false</code></pre>
|
||
<p> </p>
|
||
<h3 id="改写_.prototype.valueof">改写 .prototype.valueof</h3>
|
||
<pre><code class="language-javascript"><code class="language-js"><span class="keyword token">function</span> <span class="function token">MyNumberType</span><span class="punctuation token">(</span>n<span class="punctuation token">)</span> <span class="punctuation token">{</span>
|
||
<span class="keyword token">this</span><span class="punctuation token">.</span>number <span class="operator token">=</span> n<span class="punctuation token">;</span>
|
||
<span class="punctuation token">}</span>
|
||
|
||
MyNumberType<span class="punctuation token">.</span>prototype<span class="punctuation token">.</span>valueOf <span class="operator token">=</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
|
||
<span class="keyword token">return</span> <span class="keyword token">this</span><span class="punctuation token">.</span>number<span class="punctuation token">;</span>
|
||
<span class="punctuation token">}</span><span class="punctuation token">;</span>
|
||
|
||
<span class="keyword token">var</span> myObj <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">MyNumberType</span><span class="punctuation token">(</span><span class="number token">4</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
|
||
myObj <span class="operator token">+</span> <span class="number token">3</span><span class="punctuation token">;</span> <span class="comment token">// 7</span></code></code></pre>
|
||
<h2 id="规范">规范</h2>
|
||
<table class="standard-table">
|
||
<tbody>
|
||
<tr>
|
||
<th scope="col">Specification</th>
|
||
<th scope="col">Status</th>
|
||
<th scope="col">Comment</th>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf" hreflang="en" lang="en" rel="noopener" title="ECMAScript 1st Edition (ECMA-262)">ECMAScript 1st Edition (ECMA-262)</a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td>Initial definition. Implemented in JavaScript 1.1.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/ecma-262/5.1/#sec-15.2.4.4" hreflang="en" lang="en" rel="noopener">ECMAScript 5.1 (ECMA-262)<br/><small lang="zh-CN">Object.prototype.valueOf</small></a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td> </td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/ecma-262/6.0/#sec-object.prototype.valueof" hreflang="en" lang="en" rel="noopener">ECMAScript 2015 (6th Edition, ECMA-262)<br/><small lang="zh-CN">Object.prototype.valueOf</small></a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td> </td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://tc39.github.io/ecma262/#sec-object.prototype.valueof" hreflang="en" lang="en" rel="noopener">ECMAScript Latest Draft (ECMA-262)<br/><small lang="zh-CN">Object.prototype.valueOf</small></a></td>
|
||
<td><span class="spec-Draft">Draft</span></td>
|
||
<td> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h2 id="浏览器兼容">浏览器兼容</h2>
|
||
<div class="hidden">
|
||
<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a class="external" href="https://github.com/mdn/browser-compat-data" rel="noopener">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
|
||
</div>
|
||
<p></p><div class="bc-data"><a class="bc-github-link external" href="https://github.com/mdn/browser-compat-data" rel="noopener">Update compatibility data on GitHub</a><table class="bc-table bc-table-js"><thead><tr class="bc-platforms"><td></td><th class="bc-platform-desktop" colspan="6"><span>Desktop</span></th><th class="bc-platform-mobile" colspan="7"><span>Mobile</span></th><th class="bc-platform-server" colspan="1"><span>Server</span></th></tr><tr class="bc-browsers"><td></td><th class="bc-browser-chrome"><span class="bc-head-txt-label bc-head-icon-chrome">Chrome</span></th><th class="bc-browser-edge"><span class="bc-head-txt-label bc-head-icon-edge">Edge</span></th><th class="bc-browser-firefox"><span class="bc-head-txt-label bc-head-icon-firefox">Firefox</span></th><th class="bc-browser-ie"><span class="bc-head-txt-label bc-head-icon-ie">Internet Explorer</span></th><th class="bc-browser-opera"><span class="bc-head-txt-label bc-head-icon-opera">Opera</span></th><th class="bc-browser-safari"><span class="bc-head-txt-label bc-head-icon-safari">Safari</span></th><th class="bc-browser-webview_android"><span class="bc-head-txt-label bc-head-icon-webview_android">Android webview</span></th><th class="bc-browser-chrome_android"><span class="bc-head-txt-label bc-head-icon-chrome_android">Chrome for Android</span></th><th class="bc-browser-edge_mobile"><span class="bc-head-txt-label bc-head-icon-edge_mobile">Edge Mobile</span></th><th class="bc-browser-firefox_android"><span class="bc-head-txt-label bc-head-icon-firefox_android">Firefox for Android</span></th><th class="bc-browser-opera_android"><span class="bc-head-txt-label bc-head-icon-opera_android">Opera for Android</span></th><th class="bc-browser-safari_ios"><span class="bc-head-txt-label bc-head-icon-safari_ios">Safari on iOS</span></th><th class="bc-browser-samsunginternet_android"><span class="bc-head-txt-label bc-head-icon-samsunginternet_android">Samsung Internet</span></th><th class="bc-browser-nodejs"><span class="bc-head-txt-label bc-head-icon-nodejs">Node.js</span></th></tr></thead><tbody><tr><th scope="row"><code>valueOf</code></th><td class="bc-supports-yes bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
12</td><td class="bc-supports-yes bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
1</td><td class="bc-supports-yes bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
4</td><td class="bc-supports-yes bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td></tr></tbody></table><section class="bc-legend" id="sect1"><h3 class="offscreen" id="Legend">Legend</h3><dl><dt><span class="bc-supports-yes bc-supports">
|
||
<abbr class="bc-level bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
|
||
</abbr></span></dt><dd>Full support</dd></dl></section></div><p></p>
|
||
<h2 id="参考">参考</h2>
|
||
<ul>
|
||
<li><a href="Reference/Global_Objects/Object/toString" title="toString() 方法返回一个表示该对象的字符串。"><code>Object.prototype.toString()</code></a></li>
|
||
<li><a href="Reference/Global_Objects/parseInt" title="parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数 (数学系统的基础)。"><code>parseInt()</code></a></li>
|
||
</ul>
|
||
</article> |