美文网首页工作生活
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