搜尋
首頁web前端js教程JavaScript 学习技巧_javascript技巧

  1. 转化为Boolean类型
    所有JavaScript中的值都能隐式的转化为Boolean类型,比如:
       0 == false; // true<BR>
       1 == true; // true<BR>
       '' == false // true<BR>
       null == false // true<BR>
       
    但是这些值都不是Boolean类型。
    因此当我们使用三个等于号进行比较时:
       0 === false; // false<BR>
       1 === true; // false<BR>
       '' === false // false<BR>
       null === false // false<BR>
       
    现在的问题是如何将其他类型转化为Boolean类型:
       !!0 === false; // true<BR>
       !!1 === true; // true<BR>
       !!'' === false // true<BR>
       !!null === false // true<BR>
       

  2. 为参数赋初值
    JavaScript中没有重载的概念,但是JavaScript中函数的参数都是可选的,如果调用时少写了一个参数,将会被undefined 所代替。
       function plus(base, added) {<BR>
        return base + added;<BR>
       }<BR>
       plus(2); // NaN<BR>
       
    在这个例子中,plus(2)plus(2, undefined) 是等价的,2 + undefined 的结果是NaN
    现在的问题是,如果没有传递第二个参数,如何为它赋初值呢?
       function plus(base, added) {<BR>
        added = added || 1;<BR>
        return base + added;<BR>
       }<BR>
       plus(2); // 3<BR>
       plus(2, 2); // 4<BR>
       


    有网友提到 plus(2, 0) = 3; 的确是这样的,看来这个地方还要做一些特殊处理:
       function plus(base, added) {<BR>
        added = added || (added === 0 ? 0 : 1);<BR>
        return base + added;<BR>
       }<BR>
       

  3. 阻止别人在Iframe中加载你的页面
    如果你的网站变得非常有人气的时候,就有很多网站想链接到你的网站,甚至想把你的网页通过IFrame嵌入它自己的网页。
    这样就不好玩了,那么如何来阻止这样行为呢?
       if(top !== window) {<BR>
        top.location.href = window.location.href;<BR>
       }<BR>
       
    这段代码应该放在你每个页面的head 中,如果你想知道现实中有没人在用,看看baidu的博客你就知道了。

  4. 字符串替换
    String.prototype.replace 函数经常会让那些非常熟悉C#或者Java的程序员感到迷惑。
    比如:
       'Hello world, hello world'.replace('world', 'JavaScript');<BR>
       // The result is "Hello JavaScript, hello world"<BR>
       
    replace 函数的第一个参数是正则表达式。
    如果你传递一个字符串到第一个参数,则只有第一个找到的匹配字符串被替换。
    为了解决这个问题,我们可以使用正则表达式:
       'Hello world, hello world'.replace(/world/g, 'JavaScript');<BR>
       // The result is "Hello JavaScript, hello JavaScript"<BR>
       
    我们还可以指定在替换时忽略大小写:
       'Hello world, hello world'.replace(/hello/gi, 'Hi');<BR>
       // The result is "Hi world, Hi world"<BR>
       

  5. 将arguments转化为数组
    函数中的预定义变量arguments 并非一个真正的数组,而是一个类似数组的对象。
    它具有length 属性,但是没有slice, push, sort等函数,那么如何使arguments 具有这些数组才有的函数呢?
    也就是说如何使arguments 变成一个真正的数组呢?
       function args() {<BR>
        return [].slice.call(arguments, 0);<BR>
       }<BR>
       args(2, 5, 8); // [2, 5, 8]<BR>
       

  6. 为parseInt函数指定第二个参数
    parseInt 用来将字符串转化为整形的数字,语法为:
       parseInt(str, [radix])<BR>
       
    其中第二个参数是可选的,用来指定第一个参数是几进制的。
    如果没有传递第二个参数,则按照如下规则:
    ->如果str 以 0x 开头,则认为是16进制。
    ->如果str 以 0 开头,则认为是8进制。
    ->否则,认为是10进制。
    因此如下的代码将会让人很迷惑,如果你不知道这些规则:
       parseInt('08'); // 0<BR>
       parseInt('08', 10); // 8<BR>
       

    所以,安全起见一定要为parseInt 指定第二个参数。
  7. 从数组中删除一个元素
    或许我们可以通过delete 来做到:
       var arr = [1, 2, 3, 4, 5];<BR>
       delete arr[1];<BR>
       arr; // [1, undefined, 3, 4, 5]<BR>
       
    可以看到,delete 并不能真正的删除数组中的一个元素。删除的元素会被undefined 取代,数组的长度并没有变化。

    事实上,我们可以通过Array.prototype中的splice 函数来删除数组中的元素,如下所示:
       var arr = [1, 2, 3, 4, 5];<BR>
       arr.splice(1, 1);<BR>
       arr; // [1, 3, 4, 5]<BR>
       

  8. 函数也是对象
    在JavaScript中函数也是对象,因为我们可以为函数添加属性。
    比如:
       function add() {<BR>
        return add.count++;<BR>
       }<BR>
       add.count = 0;<BR>
       add(); // 0<BR>
       add(); // 1<BR>
       add(); // 2<BR>
       
    我们为函数add 添加了count 属性,用来记录此函数被调用的次数。

    当然这可以通过更优雅的方式来实现:
       function add() {<BR>
        if(!arguments.callee.count) {<BR>
         arguments.callee.count = 0;<BR>
        }<BR>
        return arguments.callee.count++;<BR>
       }<BR>
       add(); // 0<BR>
       add(); // 1<BR>
       add(); // 2<BR>
       
    arguments.callee 指向当前正在运行的函数。

  9. 数组中的最大值
    如何在全是数字的数组中找到最大值,我们可以简单的通过循环来完成:
       var arr = [2, 3, 45, 12, 8];<BR>
       var max = arr[0];<BR>
       for(var i in arr) {<BR>
        if(arr[i] > max) {<BR>
         max = arr[i];<BR>
        }<BR>
       }<BR>
       max; // 45<BR>
       
    有没有其他方法?我们都知道JavaScript中有一个Math 对象进行数字的处理:
       Math.max(2, 3, 45, 12, 8); // 45<BR>
       
    然后,我们可以这样来找到数组中最大值:
       var arr = [2, 3, 45, 12, 8];<BR>
       Math.max.apply(null, arr); // 45<BR>
       

  10. 为IE添加console.log 函数
    在Firefox下并有Firebug的支持下,我们经常使用console.log 来在控制台记录一些信息。
    但是这种做法在IE下会阻止JavaScript的执行(在Firefox下没有启用Firebug情况下也是一样),因为此时根本没有console 对象存在。
    我们可以通过如下小技巧来防止这样情况的发生:
       if (typeof(console) === 'undefined') {<BR>
        window.console = {<BR>
         log: function(msg) {<BR>
          alert(msg);<BR>
         }<BR>
        };<BR>
       }<BR>
       console.log('debug info.');<BR>
       

  11. undefined 是JavaScript中保留关键字么?
    看起来像是的,但实际上undefined并不是JavaScript中的关键字:
       var undefined = 'Hello'; <BR>
       undefined; // 'Hello'<BR>
       
    这段代码可能会让你感到很奇怪,不过它的确能够正常运行,undefined 只是JavaScript中一个预定义的变量而已。
    注:在JavaScript程序中,千万不要这样做,这个技巧只是告诉你有这么一回事而已。

  12. 判断一个变量是否为undefined
    两种情况下,一个变量为undefined:
    1. 声明了变量,但是没有赋值
       var name; <BR>
       name === undefined; // true<BR>
       
    2. 从来没有声明过此变量
       name2 === undefined; // error – name2 is not defined<BR>
       
    在第二种情况下,会有一个错误被抛出,那么如果判断一个变量是否为undefined而不产生错误呢?
    下面提供了一种通用的方法:
       typeof(name2) === ‘undefined'; // true<BR>
       

  13. 预加载图片
    预加载图片就是加载页面上不存在的图片,以便以后使用JavaScript把它们快速显示出来。
    比如你想在鼠标移动到某个图片上时显示另一张图片:
       var img = new Image(); <BR>
       img.src = "clock2.gif";<BR>
       
       <img src="/static/imghwm/default1.png"  data-src="clock.gif"  class="lazy" alt="" <BR>
        onmouseover="this.src='clock2.gif';" <BR>
        onmouseout="this.src=clock.gif';" /><BR>
       

    那么,如何加载一组图片呢?考虑如下代码:
       var source = ['img1.gif','img2.gif']; <BR>
       var img = new Image(); <BR>
       for(var i = 0; i < source.length; i++) { <BR>
        img.src = source[i]; <BR>
       }<BR>
       
    实际上,这段代码只能预加载最后的一张图片,因为其他的图片根本没有时间来预加载在循环到来的时候。
    因此正确的写法应该是:
       var source = ['img1.gif','img2.gif']; <BR>
       for(var i = 0; i < source.length; i++) { <BR>
        var img = new Image(); <BR>
        img.src = source[i]; <BR>
       }<BR>
       

  14. 闭包(closure)
    闭包指的是函数内的局部变量,当函数返回时此变量依然可用。
    当你在函数内部定义另外一个函数时,你就创建了一个闭包,一个著名的例子:
       function add(i) { <BR>
        return function() { <BR>
         return ++i; <BR>
        }; <BR>
       } <BR>
       add(2).toString(); // "function () { return ++i; }" <BR>
       add(2)(); // 3<BR>
       
    add(2) 是一个函数,它可能获取外部函数的局部变量i
    参考文章

  15. 私有变量
    我们经常使用命名规范来标示一个变量是否为私有变量(最常用来标示):
       var person = { <BR>
        _name: '', <BR>
        getName: function() { <BR>
         return this._name || 'not defined'; <BR>
        } <BR>
       }; <BR>
       person.getName(); // "not defined"<BR>
       
    下划线前缀用来作为私有变量的约定,但是其他开发人员仍然可以调用此私有变量:
       person._name; // ""<BR>
       
    那么,如何在JavaScript中创建一个真正的私有变量呢?
    主要技巧是使用匿名函数(anonymous function)和闭包(closure)。
       var person = {}; <BR>
       (function() { <BR>
        var _name = ''; <BR>
        person.getName = function() { <BR>
         return _name || 'not defined'; <BR>
        } <BR>
       })(); <br><br>
       person.getName(); // "not defined" <BR>
       typeof(person._name); // "undefined"<BR>
       

  16. JavaScript没有块级上下文(Scope)
    JavaScript中块级代码没有上下文,实际上只有函数有自己的上下文。
       for(var i = 0; i < 2; i ++) { <br><br>
       } <BR>
       i; // 2<BR>
       
    如果想创建一个上下文,可以使用自执行的匿名函数:
       (function (){ <BR>
        for(var i = 0; i < 2; i ++) { <br><br>
        }<BR>
       })(); <BR>
       typeof(i) === 'undefined'; // true<BR>
       

  17. 怪异的NaN
    NaN用来表示一个值不是数字。
    NaN在JavaScript中行为很怪异,是因为那NaN和任何值都不相等(包括它自己)。
       NaN === NaN; // false<BR>
       
    因为下面的代码可能会让一些人抓狂:
       parseInt('hello', 10); // NaN <BR>
       parseInt('hello', 10) == NaN; // false <BR>
       parseInt('hello', 10) === NaN; // false<BR>
       
    那么如何来检查一个值是否NaN?
    可以使用window.isNaN来判断:
       isNaN(parseInt('hello', 10)); // true<BR>
       

  18. 真值和假值
    JavaScript中所有值都能隐式地转化为Boolean类型。
    在条件判断中,下面这些值会自动转化为false:
    null, undefined, NaN, 0, ‘', false
    因此,不需要做如下复杂的判断:
       if(obj === undefined || obj === null) { <BR>
       }<BR>
       
    而只需要这样做就行了:
       if(!obj) { <br><br>
       }<BR>
       

  19. 修改arguments
    比如,添加一个值到arguments中:
       function add() { <BR>
        arguments.push('new value'); <BR>
       } <BR>
       add(); // error - arguments.push is not a function<BR>
       
    这样会出错,因为arguments 不是一个真正的数组,没有push方法。
    解决办法:
       function add() { <BR>
        Array.prototype.push.call(arguments, 'new value'); <BR>
        return arguments; <BR>
       } <BR>
       add()[0]; // "new value"<BR>
       

  20. Boolean 和 new Boolean
    我们可以把Boolean看做是一个函数,用来产生Boolean类型的值(Literal):
       Boolean(false) === false; // true <BR>
       Boolean('') === false; // true<BR>
       
    所以,Boolean(0)!!0 是等价的。
    我们也可以把Boolean看做是一个构造函数,通过new 来创建一个Boolean类型的对象:
       new Boolean(false) === false; // false <BR>
       new Boolean(false) == false; // true <BR>
       typeof(new Boolean(false)); // "object" <BR>
       typeof(Boolean(false)); // "boolean"<BR>
       

  21. 快速字符串连接
    我们经常使用+ 将较短的字符串连接为一个长字符串,这在大部分的情况下是没问题的。
    但是如果有大量的字符串需要连接,这种做法将会遇到性能问题,尤其是在IE下。
       var startTime = new Date();<BR>
       var str = '';<BR>
       for (var i = 0; i < 50000; i++) {<BR>
        str += i;<BR>
       }<BR>
       alert(new Date() - startTime); // Firefox - 18ms, IE7 - 2060ms<BR>
       
       var startTime = new Date();<BR>
       var arr = [];<BR>
       for (var i = 0; i < 100000; i++) {<BR>
        arr.push(i);<BR>
       }<BR>
       var str = arr.join("");<BR>
       alert(new Date() - startTime); // Firefox - 38ms, IE7 - 280ms<BR>
       

    可以看到Firefox似乎对+ 操作符进行了优化,而IE则表现的傻乎乎的。
  22. 一元操作符 +
    在JavaScript中,我们可以在字符串之前使用一元操作符“+”。这将会把字符串转化为数字,如果转化失败则返回NaN。
       2 + '1'; // "21"<BR>
       2 + ( +'1'); // 3<BR>
       
    如果把 + 用在非字符串的前面,将按照如下顺序进行尝试转化:
    1. 调用valueOf()
    2. 调用toString()
    3. 转化为数字
       +new Date; // 1242616452016<BR>
       +new Date === new Date().getTime(); // true<BR>
       +new Date() === Number(new Date) // true<BR>
       
    参考文章

  23. encodeURI和encodeURIComponent
    window.encodeURI函数用来编码一个URL,但是不会对以下字符进行编码:“:”, “/”, “;”, “?”.
    window.encodeURIComponent则会对上述字符进行编码。
    我们通过一个例子来说明:
       'index.jsp?page='+encodeURI('/page/home.jsp'); // "index.jsp?page=/page/home.jsp"<BR>
       'index.jsp?page='+encodeURIComponent('/page/home.jsp'); // "index.jsp?page=%2Fpage%2Fhome.jsp"<BR>
       
    因此,在对URL进行编码时我们经常会选择 encodeURIComponent。

  24. table.innerHTML在IE下是只读属性
    我们经常通过节点的innerHTML 属性来填充节点,比如:
       <div id="container1"> </div><BR>
       
       document.getElementById('container1').innerHTML = "Hello World!";
    但是在IE下设置table.innerHTML 将会导致错误:
    <table id="table1"> </table><BR>
       
       // works well in Firefox, but fail to work in IE<BR>
       document.getElementById('table1').innerHTML = "<tr><td>Hello</td><td>World!</td></tr>";<BR>
       
    实际上,table, thead, tr, select等元素的innerHTML属性在IE下都是只读的。

    那么如果动态的创建一个table呢,下面提供了一种可行的方法:
    <div id="table1"> </div><BR>
        
       document.getElementById('table1').innerHTML = "<table><tr><td>Hello</td><td>World!</td></tr></table>";<BR>
       

  25. 0.1+0.2 != 0.3
    JavaScript将小数作为浮点数对待,所以可能会产生一些四舍五入的错误,比如:
    0.1 + 0.2; // 0.30000000000000004
    你可以通过toFixed方法指定四舍五入的小数位数:
       (0.1 + 0.2).toFixed(); // "0"<BR>
       (0.1 + 0.2).toFixed(1); // "0.3"

javascript 是一种区分大小写的程序语言.

定义数组:
var strweek= new Array(7);

问号表达式
var i= (condition)?A:B;
相当于if-else 语句;condition 成立 执行A ,不成立执行B;

switch 语句

var i=3;
var result="";
swithck(i);
{
case 1;
result="First";
case 2;
result="Second";
case 3;
result="Three";
break;
}

Date类
getDate() getYear() getMont()
getMinutes() getHours() getSeconds()
setTimeout("fution()",1000);
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用