文章列表


<p>JavaScript 是一种动态类型的语言,具有自动垃圾回收机制,它会自动释放不再使用的内存。JavaScript 的垃圾回收机制会周期性地检查内存中的对象,如果某个对象没有被引用,即没有任何变量或对象引用它,那么这个对象就会被自动回收,释放其占用的内存。 下面是一个简单的 JavaScript 垃圾回收机制的示例:</p><pre class="brush:js;toolbar:false">let&nbsp;a&nbsp;=&nbsp;{&nbsp;prop:&nbsp;1&nbsp;};&nbsp;//&nbsp;创建一个对象 let&nbsp;b&nbsp;=&nbsp;a;&nbsp;//&nbsp;变量&nbsp;b&nbsp;引用同一个对象 a&nbsp;=&nbsp;null;&nbsp;//&nbsp;取消&nbsp;a&nbsp;对对象的引用 //&nbsp;此时对象仍然被变量&nbsp;b&nbsp;引用,不会被回收 //&nbsp;只有当变量&nbsp;b&nbsp;也被取消引用时,对象才会被回收</pre><p>在这个示例中,创建了一个对象 a,然后让变量 b 引用同一个对象。当取消变量 a 对对象的引用时,对象仍然被变量 b 引用,因此不会被回收。只有当变量 b 也被取消引用时,对象才会被回收。 JavaScript 的垃圾回收机制采用的是标记清除算法。当对象不再被引用时,垃圾回收器会标记这个对象,然后清除所有指向该对象的引用,并将其内存释放回系统。 需要注意的是,在使用 JavaScript 时,应该尽量避免创建不必要的对象和引用,以减少内存占用和垃圾回收的频率,提高应用的性能。 另外,JavaScript 中还提供了手动管理内存的方法,例如使用 delete 关键字删除对象属性、使用 clearInterval() 和 clearTimeout() 方法停止定时器等。但是这些方法并不会立即回收内存,仅仅是取消引用,由垃圾回收机制来决定是否回收内存。 小结,在开发 JavaScript 应用时,了解垃圾回收机制的原理和如何优化内存使用,对提高应用的性能和稳定性非常重要。</p>

<p>在 JavaScript 中,执行上下文和作用域是非常重要的概念。执行上下文是代码被执行时所处的环境,包括变量对象、作用域链、this 等信息。作用域是指在代码中定义变量的区域,决定了变量的可见性和生命周期。 下面是一些 JavaScript 中执行上下文和作用域的示例: 执行上下文</p><pre class="brush:js;toolbar:false">function&nbsp;sayHello(name)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); } sayHello(&quot;Alice&quot;); //&nbsp;输出:Hello,&nbsp;Alice! //&nbsp;执行上下文: //&nbsp;-&nbsp;变量对象:包括&nbsp;arguments&nbsp;对象和函数中定义的变量 //&nbsp;-&nbsp;作用域链:指向函数的父级作用域,即全局作用域 //&nbsp;-&nbsp;this:指向全局对象,因为该函数不是作为对象的方法调用的</pre><p>作用域</p><pre class="brush:js;toolbar:false">let&nbsp;a&nbsp;=&nbsp;10; function&nbsp;foo()&nbsp;{ &nbsp;&nbsp;let&nbsp;b&nbsp;=&nbsp;20; &nbsp;&nbsp;console.log(a,&nbsp;b); } foo();&nbsp;//&nbsp;输出:10&nbsp;20 console.log(a,&nbsp;b);&nbsp;//&nbsp;报错,b&nbsp;不在当前作用域中 //&nbsp;作用域: //&nbsp;-&nbsp;全局作用域:包含全局变量&nbsp;a&nbsp;和函数&nbsp;foo //&nbsp;-&nbsp;函数作用域:包含函数内部定义的变量&nbsp;b</pre><p>作用域链</p><pre class="brush:js;toolbar:false">let&nbsp;a&nbsp;=&nbsp;10; function&nbsp;foo()&nbsp;{ &nbsp;&nbsp;let&nbsp;b&nbsp;=&nbsp;20; &nbsp;&nbsp;function&nbsp;bar()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;c&nbsp;=&nbsp;30; &nbsp;&nbsp;&nbsp;&nbsp;console.log(a,&nbsp;b,&nbsp;c); &nbsp;&nbsp;} &nbsp;&nbsp;bar(); } foo();&nbsp;//&nbsp;输出:10&nbsp;20&nbsp;30 //&nbsp;作用域链: //&nbsp;-&nbsp;bar&nbsp;函数的变量对象 //&nbsp;-&nbsp;foo&nbsp;函数的变量对象 //&nbsp;-&nbsp;全局变量对象</pre><p>需要注意的是,在 JavaScript 中,函数可以访问其外部作用域中的变量。这个特性被称为闭包,它允许函数在执行完后仍然可以访问其外部作用域中的变量。下面是一个闭包的示例:</p><pre class="brush:js;toolbar:false">function&nbsp;outer()&nbsp;{ &nbsp;&nbsp;let&nbsp;a&nbsp;=&nbsp;10; &nbsp;&nbsp;function&nbsp;inner()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;console.log(a); &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;inner; } let&nbsp;fn&nbsp;=&nbsp;outer(); fn();&nbsp;//&nbsp;输出:10</pre><p>在上面的示例中,inner 函数访问了其外部作用域中的变量 a,由于返回了 inner 函数,所以 fn 变量也可以访问变量 a。这种特性被称为函数的闭包。</p>

<p>在 JavaScript 中,数据类型可以分为原始值和引用值。原始值指的是简单的数据类型,如字符串、数字、布尔值、null 和 undefined;引用值指的是复杂的数据类型,如对象、数组、函数等。 原始值是通过值来比较的,也就是说,当两个变量的值相同时,它们就相等。而引用值是通过引用来比较的,也就是说,当两个变量引用同一个对象时,它们才相等。 下面是一些 JavaScript 中原始值和引用值的示例: 原始值</p><pre class="brush:js;toolbar:false">let&nbsp;a&nbsp;=&nbsp;10; let&nbsp;b&nbsp;=&nbsp;a;&nbsp;//&nbsp;b&nbsp;的值为&nbsp;10 b&nbsp;=&nbsp;20;&nbsp;//&nbsp;a&nbsp;的值不会改变,仍为&nbsp;10 let&nbsp;str1&nbsp;=&nbsp;&quot;hello&quot;; let&nbsp;str2&nbsp;=&nbsp;str1;&nbsp;//&nbsp;str2&nbsp;的值为&nbsp;&quot;hello&quot; str2&nbsp;=&nbsp;&quot;world&quot;;&nbsp;//&nbsp;str1&nbsp;的值不会改变,仍为&nbsp;&quot;hello&quot; let&nbsp;bool1&nbsp;=&nbsp;true; let&nbsp;bool2&nbsp;=&nbsp;bool1;&nbsp;//&nbsp;bool2&nbsp;的值为&nbsp;true bool2&nbsp;=&nbsp;false;&nbsp;//&nbsp;bool1&nbsp;的值不会改变,仍为&nbsp;true</pre><p>引用值</p><pre class="brush:js;toolbar:false">let&nbsp;obj1&nbsp;=&nbsp;{&nbsp;name:&nbsp;&quot;Alice&quot;,&nbsp;age:&nbsp;20&nbsp;}; let&nbsp;obj2&nbsp;=&nbsp;obj1;&nbsp;//&nbsp;obj2&nbsp;引用了&nbsp;obj1&nbsp;所指向的对象 obj2.age&nbsp;=&nbsp;21;&nbsp;//&nbsp;obj1&nbsp;和&nbsp;obj2&nbsp;都指向同一个对象,所以&nbsp;obj1.age&nbsp;也会变成&nbsp;21 let&nbsp;arr1&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3]; let&nbsp;arr2&nbsp;=&nbsp;arr1;&nbsp;//&nbsp;arr2&nbsp;引用了&nbsp;arr1&nbsp;所指向的数组 arr2.push(4);&nbsp;//&nbsp;arr1&nbsp;和&nbsp;arr2&nbsp;都指向同一个数组,所以&nbsp;arr1&nbsp;的长度也会变成&nbsp;4 function&nbsp;sayHello(name)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); } let&nbsp;func1&nbsp;=&nbsp;sayHello; let&nbsp;func2&nbsp;=&nbsp;func1;&nbsp;//&nbsp;func2&nbsp;引用了&nbsp;func1&nbsp;所指向的函数 func2(&quot;Bob&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;Bob!</pre><p>需要注意的是,当把一个引用值赋值给另一个变量时,它们实际上是共享同一个对象。因此,修改一个变量的值也会影响另一个变量的值。</p>

<p>JavaScript 中函数有很多种用法,以下是其中的一些常见用法及示例: 函数声明(Function Declaration) 函数声明是最常见的定义函数的方式。使用 function 关键字定义一个函数,并给函数起一个名称。 示例:</p><pre class="brush:js;toolbar:false">function&nbsp;greet(name)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); } greet(&quot;Alice&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;Alice!</pre><p>函数表达式(Function Expression) 函数表达式定义一个匿名函数,并将其赋值给一个变量。 示例:</p><pre class="brush:js;toolbar:false">const&nbsp;greet&nbsp;=&nbsp;function(name)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); }; greet(&quot;Bob&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;Bob!</pre><p>箭头函数(Arrow Function) 箭头函数是 ES6 中引入的一种新的函数定义语法。它可以简化函数的书写,并且可以更方便地处理 this 指向的问题。 示例:</p><pre class="brush:js;toolbar:false">const&nbsp;greet&nbsp;=&nbsp;(name)&nbsp;=&gt;&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); }; greet(&quot;Charlie&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;Charlie!</pre><p>带默认参数的函数 JavaScript 中可以给函数参数设置默认值,当调用函数时没有传递参数时,将会使用默认值。 示例:</p><pre class="brush:js;toolbar:false">function&nbsp;greet(name&nbsp;=&nbsp;&quot;World&quot;)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); } greet();&nbsp;//&nbsp;输出:Hello,&nbsp;World! greet(&quot;David&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;David!</pre><p>剩余参数(Rest Parameters) 剩余参数可以让我们在函数中接收一个变长参数的列表。 示例:</p><pre class="brush:js;toolbar:false">function&nbsp;sum(...numbers)&nbsp;{ &nbsp;&nbsp;return&nbsp;numbers.reduce((total,&nbsp;num)&nbsp;=&gt;&nbsp;total&nbsp;+&nbsp;num,&nbsp;0); } console.log(sum(1,&nbsp;2,&nbsp;3));&nbsp;//&nbsp;输出:6 console.log(sum(4,&nbsp;5,&nbsp;6,&nbsp;7));&nbsp;//&nbsp;输出:22</pre><p>函数作为参数 JavaScript 中的函数可以像普通变量一样被传递作为参数给另一个函数使用。 示例:</p><pre class="brush:js;toolbar:false">function&nbsp;greet(name)&nbsp;{ &nbsp;&nbsp;console.log(`Hello,&nbsp;${name}!`); } function&nbsp;greetUser(greeterFunction)&nbsp;{ &nbsp;&nbsp;greeterFunction(&quot;Emily&quot;); } greetUser(greet);&nbsp;//&nbsp;输出:Hello,&nbsp;Emily!</pre><p>函数作为返回值 JavaScript 中的函数也可以作为另一个函数的返回值。 示例:</p><pre class="brush:js;toolbar:false">function&nbsp;createGreeter(greeting)&nbsp;{ &nbsp;&nbsp;return&nbsp;function(name)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;console.log(`${greeting},&nbsp;${name}!`); &nbsp;&nbsp;}; } const&nbsp;greetInEnglish&nbsp;=&nbsp;createGreeter(&quot;Hello&quot;); greetInEnglish(&quot;Frank&quot;);&nbsp;//&nbsp;输出:Hello,&nbsp;Frank! const&nbsp;greetInFrench&nbsp;=&nbsp;createGreeter(&quot;Bonjour&quot;); greetInFrench(&quot;Gina&quot;);&nbsp;//&nbsp;输出:Bonjour,&nbsp;Gina!</pre><p>这些只是 JavaScript 中函数用法的一些常见示例,还有其他的用法,如递归函数、立即执行函数等。</p>

<p>在 JavaScript 中,变量是用来存储值的容器。变量可以是任何数据类型,如字符串、数字、布尔值、数组、对象等等。在使用变量之前,需要先声明它。声明变量可以使用 var、let 或 const 关键字。</p><p>以下是使用 var 声明变量的示例:</p><pre class="brush:bash;toolbar:false">var&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; var&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 var&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p>使用 let 声明变量与 var 类似,但 let 可以在同一作用域内多次声明同名变量,而 var 只会声明一次。</p><p>以下是使用 let 声明变量的示例:</p><pre class="brush:as3;toolbar:false">let&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; let&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 let&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p>使用 const 声明变量时,变量的值不能被重新赋值。在同一作用域内,不能使用 const 声明同名变量或使用 let 或 var 重新赋值。</p><p>以下是使用 const 声明变量的示例:</p><pre class="brush:as3;toolbar:false">const&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; const&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 const&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p>变量的值可以在使用时被重新赋值,如下所示:</p><pre class="brush:as3;toolbar:false">var&nbsp;x&nbsp;=&nbsp;5; x&nbsp;=&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;把&nbsp;x&nbsp;的值改为&nbsp;10</pre><p>在 JavaScript 中,变量可以被用于各种计算、逻辑和条件语句中。以下是一些示例:</p><pre class="brush:as3;toolbar:false">var&nbsp;a&nbsp;=&nbsp;5; var&nbsp;b&nbsp;=&nbsp;10; var&nbsp;sum&nbsp;=&nbsp;a&nbsp;+&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;sum&nbsp;变量的值为&nbsp;15 var&nbsp;diff&nbsp;=&nbsp;b&nbsp;-&nbsp;a;</pre><p><span style="color: rgb(106, 153, 85);"></span><br/></p><p><br/></p><p><br/></p>

<p>在 JavaScript 中,变量是用来存储值的容器。变量可以是任何数据类型,如字符串、数字、布尔值、数组、对象等等。在使用变量之前,需要先声明它。声明变量可以使用 var、let 或 const 关键字。</p><p>以下是使用 var 声明变量的示例:</p><p></p><pre class="brush:bash;toolbar:false">var&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; var&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 var&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p>使用 let 声明变量与 var 类似,但 let 可以在同一作用域内多次声明同名变量,而 var 只会声明一次。</p><p>以下是使用 let 声明变量的示例:</p><p></p><pre class="brush:as3;toolbar:false">let&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; let&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 let&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p><span style="color: #6a9955;"></span><br/></p><p>使用 const 声明变量时,变量的值不能被重新赋值。在同一作用域内,不能使用 const 声明同名变量或使用 let 或 var 重新赋值。</p><p>以下是使用 const 声明变量的示例:</p><p></p><pre class="brush:as3;toolbar:false">const&nbsp;name&nbsp;=&nbsp;&quot;John&quot;;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;name&nbsp;的变量,初始值为字符串&nbsp;&quot;John&quot; const&nbsp;age&nbsp;=&nbsp;30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;age&nbsp;的变量,初始值为数字&nbsp;30 const&nbsp;isStudent&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;//&nbsp;声明一个名为&nbsp;isStudent&nbsp;的变量,初始值为布尔值&nbsp;true</pre><p><span style="color: #6a9955;"></span><br/></p><p>变量的值可以在使用时被重新赋值,如下所示:</p><p></p><pre class="brush:as3;toolbar:false">var&nbsp;x&nbsp;=&nbsp;5; x&nbsp;=&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;把&nbsp;x&nbsp;的值改为&nbsp;10</pre><p><span style="color: #6a9955;"></span><br/></p><p>在 JavaScript 中,变量可以被用于各种计算、逻辑和条件语句中。以下是一些示例:</p><p></p><pre class="brush:as3;toolbar:false">var&nbsp;a&nbsp;=&nbsp;5; var&nbsp;b&nbsp;=&nbsp;10; var&nbsp;sum&nbsp;=&nbsp;a&nbsp;+&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;sum&nbsp;变量的值为&nbsp;15 var&nbsp;diff&nbsp;=&nbsp;b&nbsp;-&nbsp;a;</pre><p><span style="color: #6a9955;"></span><br/></p><p><br/></p>

<p>JavaScript 中有一些关键字和保留字,它们具有特殊的含义或用途,不能用作变量名或标识符。</p><p>以下是 JavaScript 中的一些关键字:</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>break</p></li><li><p>case</p></li><li><p>catch</p></li><li><p>class</p></li><li><p>const</p></li><li><p>continue</p></li><li><p>debugger</p></li><li><p>default</p></li><li><p>delete</p></li><li><p>do</p></li><li><p>else</p></li><li><p>export</p></li><li><p>extends</p></li><li><p>finally</p></li><li><p>for</p></li><li><p>function</p></li><li><p>if</p></li><li><p>import</p></li><li><p>in</p></li><li><p>instanceof</p></li><li><p>let</p></li><li><p>new</p></li><li><p>return</p></li><li><p>super</p></li><li><p>switch</p></li><li><p>this</p></li><li><p>throw</p></li><li><p>try</p></li><li><p>typeof</p></li><li><p>var</p></li><li><p>void</p></li><li><p>while</p></li><li><p>with</p></li><li><p>yield</p></li></ul><p>除了这些关键字,JavaScript 还有一些保留字,虽然它们目前没有被用作关键字,但将来可能会用作关键字,因此不应该用作变量名或标识符。以下是 JavaScript 中的一些保留字:</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>enum</p></li><li><p>implements</p></li><li><p>interface</p></li><li><p>package</p></li><li><p>private</p></li><li><p>protected</p></li><li><p>public</p></li><li><p>static</p></li></ul><p>如果你使用这些关键字或保留字作为变量名或标识符,JavaScript 解释器会将其作为关键字或保留字处理,可能会导致错误或异常。因此,在编写 JavaScript 代码时,应该避免使用这些关键字和保留字作为变量名或标识符。</p><p><br/></p>

<p>&lt;noscript&gt; 元素是 HTML 中的一个标记,它用于在浏览器不支持 JavaScript 或者 JavaScript 被禁用时提供替代内容。</p><p>当浏览器不能运行 JavaScript 时,它将忽略所有包含在 &lt;script&gt; 元素内的代码,并显示 &lt;noscript&gt; 元素内的替代内容。</p><p>例如,以下示例显示了一个页面标题,并使用 &lt;noscript&gt; 元素提供了一个备选方案:</p><pre class="brush:as3;toolbar:false">&lt;!DOCTYPE&nbsp;html&gt; &lt;html&gt; &lt;head&gt; &nbsp;&nbsp;&lt;title&gt;My&nbsp;Website&lt;/title&gt; &nbsp;&nbsp;&lt;script&gt; &nbsp;&nbsp;&nbsp;&nbsp;document.title&nbsp;=&nbsp;&quot;Updated&nbsp;Title&quot;; &nbsp;&nbsp;&lt;/script&gt; &nbsp;&nbsp;&lt;noscript&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;My&nbsp;Website&nbsp;(without&nbsp;JavaScript)&lt;/title&gt; &nbsp;&nbsp;&lt;/noscript&gt; &lt;/head&gt; &lt;body&gt; &nbsp;&nbsp;&lt;h1&gt;Welcome&nbsp;to&nbsp;my&nbsp;website&lt;/h1&gt; &nbsp;&nbsp;&lt;!--&nbsp;页面主要内容&nbsp;--&gt; &lt;/body&gt; &lt;/html&gt;</pre><p>在上面的例子中,如果浏览器支持 JavaScript,则 &lt;script&gt; 元素将更新页面标题。否则,浏览器将忽略 &lt;script&gt; 元素并显示 &lt;noscript&gt; 元素内的备选方案。备选方案的标题将包含 <span style="color: #ce9178;">&quot;(without JavaScript)&quot;</span> 后缀,这样用户就可以清楚地知道他们正在浏览未经修改的版本。</p><p>需要注意的是,如果浏览器支持 JavaScript,则 &lt;noscript&gt; 元素内的内容将被忽略,所以不要在其中包含重要的信息。&lt;noscript&gt; 元素应该只用于提供最基本的可用性和可访问性。</p><p>另外,需要注意的是,有些屏幕阅读器会跳过 &lt;noscript&gt; 元素,因此如果您依赖于该元素来提供替代内容,请确保其能够被屏幕阅读器正确处理。</p><p><br/></p>

<p>JavaScript 是一种动态类型语言,其支持以下数据类型: 字符串(String):用于表示文本数据,可以使用单引号或双引号括起来,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;str1&nbsp;=&nbsp;&#39;Hello&nbsp;World&#39;; let&nbsp;str2&nbsp;=&nbsp;&quot;Welcome&nbsp;to&nbsp;JavaScript&quot;;</pre><p>数字(Number):用于表示数值数据,包括整数和浮点数,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;num1&nbsp;=&nbsp;10; let&nbsp;num2&nbsp;=&nbsp;3.14;</pre><p>布尔值(Boolean):用于表示真假值,只有两个取值:true 和 false,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;bool1&nbsp;=&nbsp;true; let&nbsp;bool2&nbsp;=&nbsp;false;</pre><p>空值(Null):用于表示空值或者不存在的值,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;nullValue&nbsp;=&nbsp;null;</pre><p>未定义(Undefined):用于表示变量已声明但未初始化或者不存在的值,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;undefinedValue&nbsp;=&nbsp;undefined;</pre><p>对象(Object):用于表示复杂数据类型,包括对象、数组、函数等,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;obj&nbsp;=&nbsp;{&nbsp;name:&nbsp;&#39;John&#39;,&nbsp;age:&nbsp;30&nbsp;}; let&nbsp;arr&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;4]; function&nbsp;sum(a,&nbsp;b)&nbsp;{ &nbsp;&nbsp;return&nbsp;a&nbsp;+&nbsp;b; }</pre><p>符号(Symbol):用于表示唯一的标识符,可以用于对象属性的键名,例如:</p><pre class="brush:js;toolbar:false">let&nbsp;symbol1&nbsp;=&nbsp;Symbol(&#39;foo&#39;); let&nbsp;symbol2&nbsp;=&nbsp;Symbol(&#39;foo&#39;); console.log(symbol1&nbsp;===&nbsp;symbol2);&nbsp;//&nbsp;false</pre><p>下面是一些数据类型的用法示例:</p><pre class="brush:js;toolbar:false">//&nbsp;字符串 let&nbsp;str&nbsp;=&nbsp;&#39;Hello&nbsp;World&#39;; console.log(str.length);&nbsp;//&nbsp;11 console.log(str.toUpperCase());&nbsp;//&nbsp;HELLO&nbsp;WORLD console.log(str.indexOf(&#39;World&#39;));&nbsp;//&nbsp;6 //&nbsp;数字 let&nbsp;num&nbsp;=&nbsp;3.14; console.log(num.toFixed(2));&nbsp;//&nbsp;3.14 console.log(Math.pow(2,&nbsp;3));&nbsp;//&nbsp;8 console.log(Math.sqrt(16));&nbsp;//&nbsp;4 //&nbsp;布尔值 let&nbsp;bool&nbsp;=&nbsp;true; console.log(!bool);&nbsp;//&nbsp;false console.log(bool&nbsp;&amp;&amp;&nbsp;true);&nbsp;//&nbsp;true console.log(bool&nbsp;||&nbsp;false);&nbsp;//&nbsp;true //&nbsp;空值和未定义 let&nbsp;nullValue&nbsp;=&nbsp;null; let&nbsp;undefinedValue; console.log(nullValue);&nbsp;//&nbsp;null console.log(undefinedValue);&nbsp;//&nbsp;undefined //&nbsp;对象 let&nbsp;obj&nbsp;=&nbsp;{&nbsp;name:&nbsp;&#39;John&#39;,&nbsp;age:&nbsp;30&nbsp;}; console.log(obj.name);&nbsp;//&nbsp;John console.log(obj.age);&nbsp;//&nbsp;30 console.log(obj.hasOwnProperty(&#39;name&#39;));&nbsp;//&nbsp;true let&nbsp;arr&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;4]; console.log(arr.length);&nbsp;//&nbsp;4 console.log(arr[0]);&nbsp;//&nbsp;1 console.log(arr.includes(3));&nbsp;//&nbsp;true function&nbsp;sum(a,&nbsp;b)&nbsp;{ &nbsp;&nbsp;return&nbsp;a&nbsp;+&nbsp;b; } console.log(sum(1,&nbsp;2));&nbsp;//&nbsp;3 //&nbsp;符号 let&nbsp;symbol&nbsp;=&nbsp;Symbol(&#39;foo&#39;); console.log(typeof&nbsp;symbol);&nbsp;//&nbsp;symbol console.log(symbol.toString());&nbsp;//&nbsp;Symbol(foo)</pre>

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p style="border: 0px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x:0; --tw-border-spacing-y:0; --tw-translate-x:0; --tw-translate-y:0; --tw-rotate:0; --tw-skew-x:0; --tw-skew-y:0; --tw-scale-x:1; --tw-scale-y:1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness:proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width:0px; --tw-ring-offset-color:#fff; --tw-ring-color:rgba(59,130,246,0.5); --tw-ring-offset-shadow:0 0 transparent; --tw-ring-shadow:0 0 transparent; --tw-shadow:0 0 transparent; --tw-shadow-colored:0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; margin-top: 0px; margin-bottom: 1.25em;">在Magento系统中,module.xml文件是一个用于定义模块名称的配置文件,它必须放置在模块或自定义模块目录下的以下文件路径中:magento/app/code/namespace/modulename/etc/module.xml。该文件定义了模块的基本信息,如模块的名称、版本号、序列、依赖项等,这些信息对于Magento系统的正确运行至关重要。 module.xml文件还可以用于指定模块的路由、布局、块和插件等方面的配置。此外,Magento系统中的每个模块都可以有一个全局和特定区域的di.xml文件,用于配置依赖项注入(Dependency Injection),以及指定敏感配置设置。</p><p style="border: 0px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x:0; --tw-border-spacing-y:0; --tw-translate-x:0; --tw-translate-y:0; --tw-rotate:0; --tw-skew-x:0; --tw-skew-y:0; --tw-scale-x:1; --tw-scale-y:1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness:proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width:0px; --tw-ring-offset-color:#fff; --tw-ring-color:rgba(59,130,246,0.5); --tw-ring-offset-shadow:0 0 transparent; --tw-ring-shadow:0 0 transparent; --tw-shadow:0 0 transparent; --tw-shadow-colored:0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; margin-top: 1.25em; margin-bottom: 1.25em;">在具体实践中,开发者可以将自己编写的插件模块放在 app/code/ 目录下,并按照一定的命名规则创建module.xml文件。例如,一个名为Test的模块的命名空间为Plugin,则它的文件路径应为app/code/Plugin/Test/etc/module.xml。创建module.xml文件后,开发者可以在其中指定模块的名称、版本号、依赖项等信息。</p><p style="border: 0px solid rgb(217, 217, 227); box-sizing: border-box; --tw-border-spacing-x:0; --tw-border-spacing-y:0; --tw-translate-x:0; --tw-translate-y:0; --tw-rotate:0; --tw-skew-x:0; --tw-skew-y:0; --tw-scale-x:1; --tw-scale-y:1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness:proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width:0px; --tw-ring-offset-color:#fff; --tw-ring-color:rgba(59,130,246,0.5); --tw-ring-offset-shadow:0 0 transparent; --tw-ring-shadow:0 0 transparent; --tw-shadow:0 0 transparent; --tw-shadow-colored:0 0 transparent; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; margin-top: 1.25em; margin-bottom: 1.25em;">module.xml文件是Magento系统中重要的配置文件之一,用于定义模块的基本信息和路由、布局、块和插件等方面的配置,确保模块在Magento系统中的正确运行。开发者可以根据Magento规范,创建自己的模块和module.xml文件,并在其中指定相关的配置信息。</p><p>通过定义module.xml文件,可以指定一个模块的名称,版本号和要加载的组件类型,以及与该模块相关的其他信息。以下是一个module.xml文件的示例:</p><pre class="brush:bash;toolbar:false">&lt;?xml&nbsp;version=&quot;1.0&quot;?&gt; &lt;config&nbsp;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&nbsp;xsi:noNamespaceSchemaLocation=&quot;../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd&quot;&gt; &lt;module&nbsp;name=&quot;Vendor_Module&quot;&nbsp;setup_version=&quot;2.0.0&quot;&nbsp;schema_version=&quot;2.0.0&quot;&gt; &lt;sequence&gt; &lt;module&nbsp;name=&quot;Magento_Catalog&quot;/&gt; &lt;/sequence&gt; &lt;module&gt; &lt;/config&gt;</pre><p>在这个例子中,module.xml文件定义了Vendor_Module模块,它需要Magento_Catalog模块,以便加载时按照正确的顺序加载它们. 其中,name属性是模块的名称,setup_version属性是模块的版本号。在sequence节点中,可以定义模块的依赖关系。如果模块需要在其他模块之前加载,可以将这些模块添加到sequence节点中。</p><p><br/></p>