mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-12-16 07:51:52 +08:00
语法高亮,滚动条美化,设置页面调整
This commit is contained in:
@@ -4,12 +4,12 @@
|
||||
<div><iframe class="interactive interactive-js" frameborder="0" height="250" src="https://interactive-examples.mdn.mozilla.net/pages/js/expressions-deleteoperator.html" width="100%"></iframe></div>
|
||||
<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a class="external" href="https://github.com/mdn/interactive-examples" rel="noopener">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
|
||||
<h2 id="Syntax" name="Syntax">语法</h2>
|
||||
<pre class="syntaxbox">delete <em>expression</em>
|
||||
</pre>
|
||||
<pre><code class="language-javascript">delete <em>expression</em>
|
||||
</code></pre>
|
||||
<p> <em>expression</em> 的计算结果应该是某个属性的引用,例如:</p>
|
||||
<pre class="syntaxbox">delete <em>object.property</em>
|
||||
<pre><code class="language-javascript">delete <em>object.property</em>
|
||||
delete <em>object</em>['<em>property</em>']
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h3 id="Parameters" name="Parameters">参数</h3>
|
||||
<dl>
|
||||
<dt><code>object</code></dt>
|
||||
@@ -39,7 +39,7 @@ delete <em>object</em>['<em>property</em>']
|
||||
<li>不可设置的(Non-configurable)属性不能被移除。这意味着像<a href="Reference/Global_Objects/Math" title="Math 是一个内置对象, 它具有数学常数和函数的属性和方法。不是一个函数对象。"><code>Math</code></a>, <a href="Reference/Array" title="REDIRECT Array"><code>Array</code></a>, <a href="Reference/Global_Objects/Object" title="Object 构造函数创建一个对象包装器。"><code>Object</code></a>内置对象的属性以及使用<a href="Reference/Global_Objects/Object/defineProperty" title="Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。"><code>Object.defineProperty()</code></a>方法设置为不可设置的属性不能被删除。</li>
|
||||
</ul>
|
||||
<p>下面的代码块给出了一个简单的例子:</p>
|
||||
<pre class="brush: js">var Employee = {
|
||||
<pre><code class="language-javascript">var Employee = {
|
||||
age: 28,
|
||||
name: 'abc',
|
||||
designation: 'developer'
|
||||
@@ -50,15 +50,15 @@ console.log(delete Employee.age); // returns true
|
||||
|
||||
// 当试着删除一个不存在的属性时
|
||||
// 同样会返回true
|
||||
console.log(delete Employee.salary); // returns true</pre>
|
||||
console.log(delete Employee.salary); // returns true</code></pre>
|
||||
<h3 id="不可配置属性">不可配置属性</h3>
|
||||
<p>当一个属性被设置为不可设置,delete操作将不会有任何效果,并且会返回false。在严格模式下会抛出语法错误(<a href="Reference/Global_Objects/SyntaxError" title="SyntaxError 对象代表尝试解析语法上不合法的代码的错误。"><code>SyntaxError</code></a>)。</p>
|
||||
<pre class="brush: js">var Employee = {};
|
||||
<pre><code class="language-javascript">var Employee = {};
|
||||
Object.defineProperty(Employee, 'name', {configurable: false});
|
||||
|
||||
console.log(delete Employee.name); // returns false</pre>
|
||||
console.log(delete Employee.name); // returns false</code></pre>
|
||||
<p><a href="Reference/Statements/var" title="var 声明语句声明一个变量,并可选地将其初始化为一个值。"><code>var</code></a>, <a href="Reference/Statements/let" title="let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与var关键字不同的是,var声明的变量只能是全局或者整个函数块的。"><code>let</code></a>以及<a href="Reference/Statements/const" title="常量是块级作用域,很像使用 let 语句定义的变量。常量的值不能通过重新赋值来改变,并且不能重新声明。"><code>const</code></a>创建的不可设置的属性不能被delete操作删除。</p>
|
||||
<pre class="brush: js">var nameOther = 'XYZ';
|
||||
<pre><code class="language-javascript">var nameOther = 'XYZ';
|
||||
|
||||
// 通过以下方法获取全局属性:
|
||||
Object.getOwnPropertyDescriptor(window, 'nameOther');
|
||||
@@ -70,19 +70,19 @@ Object.getOwnPropertyDescriptor(window, 'nameOther');
|
||||
|
||||
// 因为“nameOther”使用var关键词添加,
|
||||
// 它被设置为不可设置(non-configurable)
|
||||
delete nameOther; // return false</pre>
|
||||
delete nameOther; // return false</code></pre>
|
||||
<p>在严格模式下,这样的操作会抛出异常。</p>
|
||||
<h3 id="严格模式与非严格模式的对比"><strong>严格模式与非严格模式的对比</strong></h3>
|
||||
<p>在严格模式下,如果对一个变量的直接引用、函数的参数或者函数名使用delete操作,将会抛出语法错误(<a href="Reference/Global_Objects/SyntaxError" title="SyntaxError 对象代表尝试解析语法上不合法的代码的错误。"><code>SyntaxError</code></a>)。</p>
|
||||
<p>任何使用var声明的变量都会被标记为不可设置的。在下面的例子中,salary是不可设置的以及不能被删除的。在非严格模式下,下面的delete操作将会返回false。</p>
|
||||
<pre class="brush: js">function Employee() {
|
||||
<pre><code class="language-javascript">function Employee() {
|
||||
delete salary;
|
||||
var salary;
|
||||
}
|
||||
|
||||
Employee();</pre>
|
||||
Employee();</code></pre>
|
||||
<p>让我们来看看相同的代码在严格模式下会有怎样的表现。会抛出一个语法错误( <code>SyntaxError)而不是返回false。</code></p>
|
||||
<pre class="brush: js">"use strict";
|
||||
<pre><code class="language-javascript">"use strict";
|
||||
|
||||
function Employee() {
|
||||
delete salary; // SyntaxError
|
||||
@@ -96,9 +96,9 @@ function DemoFunction() {
|
||||
//some code
|
||||
}
|
||||
|
||||
delete DemoFunction; // SyntaxError</pre>
|
||||
delete DemoFunction; // SyntaxError</code></pre>
|
||||
<h2 id="示例">示例</h2>
|
||||
<pre class="brush: js">// 在全局作用域创建 adminName 属性
|
||||
<pre><code class="language-javascript">// 在全局作用域创建 adminName 属性
|
||||
adminName = 'xyz';
|
||||
|
||||
// 在全局作用域创建 empCount 属性
|
||||
@@ -138,10 +138,10 @@ function f() {
|
||||
|
||||
// delete 对局部变量名不起作用
|
||||
delete z; // 返回 false
|
||||
}</pre>
|
||||
}</code></pre>
|
||||
<h3 id="delete_和原型链"><code>delete</code> 和原型链</h3>
|
||||
<p>在下面的示例中,我们删除一个对象的自己的属性,而原型链上具有相同名称的属性可用:</p>
|
||||
<pre class="brush: js">function Foo() {
|
||||
<pre><code class="language-javascript">function Foo() {
|
||||
this.bar = 10;
|
||||
}
|
||||
|
||||
@@ -160,26 +160,26 @@ delete Foo.prototype.bar;
|
||||
|
||||
// 输出 "undefined",因为不能继承这个属性了
|
||||
console.log(foo.bar);
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h3 id="Deleting_array_elements" name="Deleting_array_elements">删除数组元素</h3>
|
||||
<p>当你删除一个数组元素时,数组的长度不受影响。即便你删除了数组的最后一个元素也是如此。</p>
|
||||
<p>当用 <code>delete</code> 操作符删除一个数组元素时,被删除的元素已经不再属于该数组。下面的例子中用 <code>delete </code>删除了<code> trees[3]</code>。</p>
|
||||
<pre class="brush: js">var trees = ["redwood","bay","cedar","oak","maple"];
|
||||
<pre><code class="language-javascript">var trees = ["redwood","bay","cedar","oak","maple"];
|
||||
delete trees[3];
|
||||
if (3 in trees) {
|
||||
// 这里不会执行
|
||||
}
|
||||
</pre>
|
||||
</code></pre>
|
||||
<p>如果你想让一个数组元素继续存在但是其值是 <code>undefined</code>,那么可以使用将 <code>undefined</code> 赋值给这个元素而不是使用 <code>delete</code>。下面的例子中,trees[3] 被赋值为 <code>undefined</code>,但该元素仍然存在。</p>
|
||||
<pre class="brush: js">var trees = ["redwood","bay","cedar","oak","maple"];
|
||||
<pre><code class="language-javascript">var trees = ["redwood","bay","cedar","oak","maple"];
|
||||
trees[3] = undefined;
|
||||
if (3 in trees) {
|
||||
// 这里会被执行
|
||||
}</pre>
|
||||
}</code></pre>
|
||||
<p>如果你想通过改变数组的内容来移除一个数组元素,请使用<code><a href="Reference/Global_Objects/Array/splice" title="splice() 方法通过删除或替换现有元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。"><code>splice</code></a></code>方法。在下面的例子中,通过使用<code><a href="Reference/Global_Objects/Array/splice" title="splice() 方法通过删除或替换现有元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。"><code>splice</code></a></code>,将trees[3]从数组中移除。</p>
|
||||
<pre class="brush: js">var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
|
||||
<pre><code class="language-javascript">var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
|
||||
trees.splice(3,1);
|
||||
console.log(trees); // ["redwood", "bay", "cedar", "maple"]</pre>
|
||||
console.log(trees); // ["redwood", "bay", "cedar", "maple"]</code></pre>
|
||||
<h2 id="规范">规范</h2>
|
||||
<table class="standard-table">
|
||||
<tbody>
|
||||
|
||||
Reference in New Issue
Block a user