>웹 프론트엔드 >JS 튜토리얼 >JavaScript 학습 기술_javascript 기술

JavaScript 학습 기술_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:34:21751검색
  1. 부울 유형으로 변환
    JavaScript의 모든 값은 다음과 같이 암시적으로 부울 유형으로 변환될 수 있습니다.
       0 == false; // true<br>
       1 == true; // true<br>
       '' == false // true<br>
       null == false // true<br>
       
    그러나 이러한 값은 부울 유형이 아닙니다.
    따라서 비교를 위해 세 개의 등호를 사용하는 경우:
       0 === false; // false<br>
       1 === true; // false<br>
       '' === false // false<br>
       null === false // false<br>
       
    이제 문제는 다른 유형을 부울 유형으로 변환하는 방법입니다.
       !!0 === false; // true<br>
       !!1 === true; // true<br>
       !!'' === false // true<br>
       !!null === false // true<br>
       

    정의되지 않음
  2. 으로 대체되었습니다. 이 예에서 plus(2)
    plus(2, undefine)은 동일하며
       function plus(base, added) {<br>
        return base + added;<br>
       }<br>
       plus(2); // NaN<br>
       
    2 undefine의 결과는 NaN입니다. . 이제 문제는 두 번째 매개변수가 전달되지 않은 경우 초기 값을 어떻게 할당할 것인가입니다. 일부 네티즌들은 plus(2, 0) = 3이라고 언급했는데, 정말 그런 곳인 것 같습니다.
       function plus(base, added) {<br>
        added = added || 1;<br>
        return base + added;<br>
       }<br>
       plus(2); // 3<br>
       plus(2, 2); // 4<br>
       

    다른 사람이 Iframe에서 귀하의 페이지를 로드하는 것을 방지하세요
       function plus(base, added) {<br>
        added = added || (added === 0 ? 0 : 1);<br>
        return base + added;<br>
       }<br>
       
    귀하의 웹사이트가 인기를 얻으면 귀하의 웹사이트에 링크하거나 귀하의 웹페이지를 삽입하려는 웹사이트가 많이 있을 것입니다. IFrame을 통한 웹페이지.
    재밌지도 않은데 어떻게 하면 이런 행동을 멈출 수 있을까요?
  3. 이 코드는 각 페이지의 머리에 배치되어야 합니다. 누군가가 실제 생활에서 이 코드를 사용하는지 알고 싶다면 Baidu의 블로그를 살펴보세요.

       if(top !== window) {<br>
        top.location.href = window.location.href;<br>
       }<br>
       
    문자열 대체

    String.prototype.replace
  4. 이 함수는 C#이나 Java에 매우 익숙한 프로그래머를 종종 혼란스럽게 합니다. 예:
    replace 함수의 첫 번째 매개변수는 정규식입니다. 첫 번째 매개변수로 문자열을 전달하면 일치하는 첫 번째 문자열만 교체됩니다.
    이 문제를 해결하려면 정규식을 사용할 수 있습니다.
       'Hello world, hello world'.replace('world', 'JavaScript');<br>
       // The result is "Hello JavaScript, hello world"<br>
       
    대체 시 대소문자를 무시하도록 지정할 수도 있습니다.

    인수를 배열로 변환
       '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>
       

    arguments
  5. 함수에 미리 정의된 변수는 실제 배열이 아니라 배열과 유사한 객체입니다. length
    속성은 있지만 슬라이스, 푸시, 정렬 등의 기능은 없습니다. 따라서 인수를 만드는 방법은 이러한 경우에만 사용할 수 있는 기능이 있습니다. 배열?
    즉, 인수를 실제 배열로 만드는 방법은 무엇일까요?
    parseInt 함수의 두 번째 매개변수를 지정하세요
       function args() {<br>
        return [].slice.call(arguments, 0);<br>
       }<br>
       args(2, 5, 8); // [2, 5, 8]<br>
       

    parseInt
  6. 는 문자열을 정수로 변환하는 데 사용됩니다. 구문은 다음과 같습니다. 두 번째 매개변수는 선택 사항입니다. , 첫 번째 매개변수의 10진수를 지정하는 데 사용됩니다. 두 번째 매개변수가 전달되지 않으면 다음 규칙을 따릅니다.
    -> str이 0x로 시작하면 16진수로 간주됩니다.
       parseInt(str, [radix])<br>
       
    ->
    str
    이 0으로 시작하면 8진수로 간주됩니다. -> 그렇지 않으면 소수로 간주됩니다. 따라서 이러한 규칙을 모른다면 다음 코드는 혼란스러울 것입니다.
    따라서 안전을 위해 parseInt
    에 대한 두 번째 매개변수를 지정해야 합니다.
       parseInt('08'); // 0<br>
       parseInt('08', 10); // 8<br>
       

    배열에서 요소 삭제
    delete
  7. 를 통해 이를 수행할 수 있습니다. 보시다시피 delete
    는 그렇지 않습니다. 정말 작동합니다. 배열에서 요소를 삭제합니다. 삭제된 요소는 undefine으로 대체되며 배열의 길이는 변경되지 않습니다.
       var arr = [1, 2, 3, 4, 5];<br>
       delete arr[1];<br>
       arr; // [1, undefined, 3, 4, 5]<br>
       
    사실 아래와 같이 Array.prototype의 splice 함수를 통해 배열의 요소를 삭제할 수 있습니다.

    함수도 객체입니다
       var arr = [1, 2, 3, 4, 5];<br>
       arr.splice(1, 1);<br>
       arr; // [1, 3, 4, 5]<br>
       
    자바스크립트에서는 함수에 속성을 추가할 수 있으므로 함수도 객체입니다.
    예:
  8. 이 함수가 호출된 횟수를 기록하기 위해 add 함수에
    count
    속성을 ​​추가했습니다.
       function add() {<br>
        return add.count++;<br>
       }<br>
       add.count = 0;<br>
       add(); // 0<br>
       add(); // 1<br>
       add(); // 2<br>
       
    물론 이는 보다 우아한 방법으로 달성할 수 있습니다. arguments.callee는 현재 실행 중인 함수를 가리킵니다.

       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>
       
    배열의 최대값
    숫자로 가득 찬 배열에서 최대값을 찾는 방법은 루프를 통해 간단하게 찾을 수 있습니다.
    다른 방법이 있나요? 우리 모두는 JavaScript에 숫자를 처리하는
  9. Math 개체가 있다는 것을 알고 있습니다. 그러면 다음과 같이 배열에서 최대값을 찾을 수 있습니다.
       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>
       
    IE용
       Math.max(2, 3, 45, 12, 8); // 45<br>
       
    console.log
       var arr = [2, 3, 45, 12, 8];<br>
       Math.max.apply(null, arr); // 45<br>
       
    기능 추가
  10. Firefox에서 Firebug를 지원하여 console.log를 사용하여 방송국 기록을 제어하는 ​​경우가 많습니다. 몇 가지 정보. 그러나 이 접근 방식은 현재 console
    개체가 전혀 없기 때문에 IE에서 JavaScript 실행을 방지합니다(Firefox에서 Firebug가 활성화되지 않은 경우에도 마찬가지). 다음 요령으로 이런 일이 발생하지 않도록 방지할 수 있습니다.

    정의되지 않음
       if (typeof(console) === 'undefined') {<br>
        window.console = {<br>
         log: function(msg) {<br>
          alert(msg);<br>
         }<br>
        };<br>
       }<br>
       console.log('debug info.');<br>
       
    은 JavaScript의 예약어인가요?
  11. 그렇게 보이지만 실제로 undefound는 JavaScript의 키워드가 아닙니다. 이 코드는 이상하다고 느낄 수도 있지만 정상적으로 작동합니다. undefine 단지 사전 정의된 것입니다. 자바스크립트의 변수. 참고: 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="clock.gif" src="clock.gif" 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으로 문의하세요.