zoukankan      html  css  js  c++  java
  • JavaScript 语法总结

    1. 不能为基本类型变量添加属性和方法. 如果添加了,那么也是undefined的.

    1 var str = "a string";
    2 str.attr = "attr";
    3 console.log(str); // "a string"
    4 console.log(str.attr); // undefined

    2. 声明了但未赋值的变量和未声明的变量都不能直接用, 但是错误是不一样的.  和它们在堆区和栈区的存储有关系.

    1 var t;
    2 console.log(t); // undefined
    3 console.log(s); // ReferenceError:s is not defined

    3. 定义变量要使用var关键字, 但是没有使用var也可以赋值给一个变量名, 如: s = 10; 但是此时s不管是在局部域还是全局域里, 这个变量始终都属于 window 对象.

    4. JavaScript中的变量作用域在函数体内有效,无块作用域.

    1 var f = function(){
    2     for(var i=0;i<n;++i){
    3         console.log(i);
    4     }
    5     //在这里i仍然有效,作用域范围是function的.      
    6 }

    5. 一段代码说明HTML文档流中不同代码执行先后顺序

     1 <script type="text/javascript">  
     2 console.log("first");
     3 function fn(){
     4     console.log("third");
     5 }
     6 </script>
     7 <body onload="fn()">
     8 <script type="text/javascript">
     9     console.log("second");
    10 </script>
    11 </body>

      - onload()事件是最后执行的.

    6. JavaScript基本类型用作包装对象时其属性都是只读的,并且不能给它们定义新的属性, 它们是有别于对象的; 不过可以通过String(),Number()或者Boolean()构造函数显示创建包装对象.

      - 使用包装对象.

    1 var s = "test";
    2 s.len = 4;
    3 var t = s.len;
    4 console.log(s);
    5 console.log(t);
    6 /*output:
    7 test
    8 undefined
    9 */

      - 使用构造函数

     1 var s = "test",n = 1,b = true;
     2 var str = new String(s);
     3 var num = new Number(n);
     4 var bool = new Boolean(b);
     5 str.len = "test".length;
     6 var t = str.len;
     7 console.log(str);
     8 console.log(t);
     9 /*output:
    10 { [String: 'test'] len: 4 }
    11 4
    12 */

    7. null和undefined比较

      undefined可以理解为一块荒地,里面有杂草,石头和各种垃圾, 不能直接耕种, 而null就相当于除草,捡出石头和垃圾, 让这块荒地变得可以耕种, 本质上来说是内存的两种不同的状态. 

      -  typeof(null); //"object"  特殊的对象, 含义是"非对象"(或指向空对象), 也可以表示基本类型的变量是无值的, 但是如果将它赋给基本类型变量, 则变量也类型转换成了object类型了.

      -  typeof(undefined); //"undefined"   预定义的全局变量,undefined在ECMAScript3中是W/R的, 在ECMAScript5中的Read-only的.

        - 是变量的一种取值, 表明变量没有初始化.

        - 如果查询对象属性或者数组元素的值时返回undefined, 则说明这个属性或元素不存在(如果要删除某对象的某个属性, 直接赋为undefined即可.).

        - 如果函数没有返回任何值, 则返回undefined.

        - 引用没有提供实参的函数形参的值也只会得到undefined.

      - 比较:

        - null 和 undefined本质是不同的, 但是往往可以互换,(1) null == undefined, null !== undefined; (2) 希望是布尔类型的地方它们都是false, null和undefined都不包含任何属性和方法; (3) 如果想赋给变量或者属性, 或者将它们作为参数传入函数, 最好用null.

    8. 数组和函数在js里面是对象, 而且函数是一等对象(first class).

    9. 对象的比较.(以下比较结果全为false)

    1 var a = [1,2,3,4];
    2 var b = [1,2,3,4];
    3 console.log(a==b);
    4 console.log(a===b);//两个单独的数组永不相等
    5 var c = {x:1};
    6 var d = {x:1};
    7 console.log(c==d);
    8 console.log(c===d);//两个单独的对象永不相等

      - 不等是因为对象是保存的引用.

        -  === 恒等运算

          - true = (值类型相同) && (都不是null或者undefined或者NaN) && (值相同)   else false

    1 var a = NaN;
    2 var b = NaN;
    3 console.log(a===b);//换成null 和 undefined时恒等.
    4 /*false*/

        -  == 在比较前会先进行类型转换, 转换原则与C语言转换很相似, 对象的转换先尝试用valueOf(),再尝试用toString()转换为原始值再进行比较(日期类只使用toString()转换). 不是JavaScript语言核心中的对象则通过各自的实现中定义的方法转换为原始值.

    10. JavaScript的类型转换.

      - 非常灵活, 主要还是根据上下文, 比如一个数字算术运算一个字符串, 会尝试将字符串转换成数字(注意: "4a"=>NaN). 如果是一个NaN+"string", 那么就会变成 "NaN string".

    1 var a = 4 * "4a";//NaN
    2 a = NaN + "4 string";//"NaN4 string"
    3 a = 4 + "4"; //"44"
    4 a = 4*"4"; //16
  • 相关阅读:
    排序算法整理
    V-REP Plugin 开发
    YAML-CPP
    YAML
    V-REP Remote API
    V-REP Plugin
    结构化方法与面向对象方法的比较
    敏捷软件开发vs传统软件工程
    个人项目-地铁出行路线规划程序
    Week1个人作业
  • 原文地址:https://www.cnblogs.com/roger9567/p/5011677.html
Copyright © 2011-2022 走看看