美文网首页工作生活
JavaScript 填坑专集

JavaScript 填坑专集

作者: 52JackWang | 来源:发表于2019-07-02 12:14 被阅读0次

    条件语句之switch-case-break

    1. switch语句中的case比较是严格相等运算(===),而不是普通相等运算(==),这意味着比较时不会发生类型转换。
    2. 通常,每个case后带上break语句。

    if语句、while语句、定义函数的循环体

    1. if语句、while语句的循环体只有一条语句时可以省略花括号。
    2. 定义函数时的函数体,不管其包含一条还是多条语句,花括号都不能省略!

    JavaScript的数据类型

    1. ES5标准规定JS的数据类型分为6种,分别为:
      • number:包括整数和小数
      • string:字符串
      • boolean:布尔值,值域为true和false
      • undefined:表示只声明没赋值,或变量不存在
      • null:表示空值,引用为空
      • object:对象,各种值得组合
    2. 数值、字符串、布尔值这三种类型,属于原始类型(primitive type);对象则称为合成类型(complex type)的值,因为对象往往是多个原始类型的值的组合;至于undefined和null,一般将它们看成两个特殊值。
    3. 对象是最复杂的数据类型,又可以分成三种子类型:
      • 狭义的对象(object)
      • 数组(array)
      • 函数(function)

    JavaScript确定某值类型的3种方法

    1. typeof运算符
      • typeof 123 → "number"
      • typeof '123' → "string"
      • typeof false → "boolean"
      • typeof 某函数 → "function"
      • typeof undefined → "undefined"
      • typeof 未定义的变量 → "undefined"
      • typeof null → "object"
      • typeof { } → "object"
      • typeof [ ] → "object"
    2. instanceof运算符
    3. Object.prototype.toString方法

    null和undefined的区别

    1. 相同点:null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。转为布尔值都是false
    2. 不同点:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

    原始值或对象→布尔值

    在需要布尔值的地方,变量会被自动转换成对应的布尔值!只有下面6种情况会被转换为false,其余都会被换成true!

    1. undefined → false
    2. null → false
    3. false → false
    4. 0 → false
    5. NaN → false
    6. 空字符串 → false

    模板字符串

    模板字符串可以较好地替代“+”进行字符串的拼接,但是需要注意模板字符串是包含在反引号内的,不是常规的正引号!

      var name = '小明';
      var age = 20;
      var message = `你好, ${name}, 你今年${age}岁了!`;
      alert(message);
    

    对象的易错点

    1. 对象的属性名是字符串或合法的标识符,但本质依旧是字符串。
    2. 访问对象的属性:objectName.propertyName或objectName["propertyName"]
    3. 对象属性成员判断:
      • "propertyName" in objectName,注意属性名必须是字符串,不区分自有属性和继承属性。
      • objectName.hasOwnProperty("propertyName"),属性名必须是字符串,检测是否为自有属性。

    遍历数组元素和对象属性

      // 遍历数组的元素
      for (var i=0; i<arr.length; i++) {
          console.log(arr[i]);
      }
      // 遍历对象的属性
      for (var key in obj) {
          // 可在输出前用hasOwnProperty()过滤自有属性
          console.log(obj[key]);
      }
    

    JavaScript 对象的解构赋值

    • 有些时候,如果变量已经被声明了,再次赋值的时候,正确的写法也会报语法错误:

      var x, y;  // 声明变量
      // 下面的解构赋值,报语法错误: Uncaught SyntaxError
      {x, y} = { name: '小明', x: 100, y: 200};
      
    • 这是因为JavaScript引擎把{开头的语句当作了块处理,于是=不再合法。解决方法是用小括号括起来:

      ({x, y} = { name: '小明', x: 100, y: 200});
      

    JavaScript 字符串→数字

    1. 使用Number()函数
    2. 使用parseInt()函数
    • 两者区别:

      function returnInt(element) {
          return parseInt(element, 10);
      }
      ['1', '2', '3'].map(returnInt); // [1, 2, 3]
      
      // Same as above, but using the concise arrow function syntax
      ['1', '2', '3'].map( str => parseInt(str) );
      
      // A simpler way to achieve the above, while avoiding the "gotcha":
      ['1', '2', '3'].map(Number); // [1, 2, 3]
      
      // Number() will also return a float or (resolved) exponential notation:
      ['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
      // For comparison, if we use parseInt() on the array above:
      ['1.1', '2.2e2', '3e300'].map( str => parseInt(str) ); // [1, 2, 3]
      
    • parseInt函数不适合直接用于array.map()函数,demo:

      ["1", "2", "3"].map(parseInt);  // 返回 [1, NaN, NaN]
      
    • 上述问题的原因分析 - 点击本链接

    JavaScript从入门到放弃^^

    1. 未完待续...

    相关文章

      网友评论

        本文标题:JavaScript 填坑专集

        本文链接:https://www.haomeiwen.com/subject/zqrzcctx.html