JavaScript 数据类型

Review notes for the tutorial of Micheal Liao

Posted by kevin on October 28, 2019

preface

本篇为廖雪峰官网 JavaScript 教程复习笔记,记下一些基本知识和 API 供自己复习用

Number

  • 整数:-1 0 1
  • 浮点数:2.33
  • 科学计数法:1.23e5
  • NaN:Not a Number ,无法计算时用 NaN 表示
  • Infinity:无穷大,超过了 JavaScript 的最大表示值时用 Infinity 表示
  • 进制数:0xffff

Methods

  • 四则运算

String

  • ‘hi’

  • “hi”

  • 多行字符串

    `这是一个
    多行
    字符串`;
    
  • ‘\x41’ :用 \x## 十六进制形式表示 ASCII 码

  • ‘\u4e2d\u6587’ :用 \u#### 表示一个 Unicode 字符

Methods

  • length

  • toUpperCase()

  • toLowerCase()

  • indexOf() //搜索指定字符串出现的位置

    var s = 'hello, world';
    s.indexOf('world'); // 返回7
    s.indexOf('World'); // 没有找到指定的子串,返回-1
    
  • substring() // 返回指定索引区间的子串

    var s = 'hello, world'
    s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
    s.substring(7); // 从索引7开始到结束,返回'world'
    
  • 拼接字符串可以用 + 号,有很多变量要拼接的话用模板字符串(表示方法和多行字符串一样)自动替换

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

Bool

  • true
  • false

Methods

  •  
  • 且 &&
  • 非 !

Attention

  • JavaScript 允许对任意数据类型作比较,用 == 比较会转化数据再比较,用 === 就不会,因此千万不要使用 == 进行比较,始终使用 === 进行比较!

    false == 0; // true
    false === 0; // false
    
  • NaN 与其他所有值都不相等,包括自己,只能用 isNaN() 进行判断

    NaN === NaN; // false
    isNaN(NaN); // true
    

null & undefined

  • null 表示空值,相当于 python 中的 None
  • undefined 表示值没有被定义
  • 大多数情况下还是应该用 null

Array

  • var arr = [1, 2, 3.14, ‘Hello’, null, true];
  • var arr = new Array(1, 2, 3)

Methods

  • index

  • length

  • indexOf( )

    var arr = [10, 20, '30', 'xyz'];
    arr.indexOf(10); // 元素10的索引为0
    arr.indexOf(20); // 元素20的索引为1
    arr.indexOf(30); // 元素30没有找到,返回-1
    arr.indexOf('30'); // 元素'30'的索引为2
    
  • slice( ) :python 的切片,string 的 substring

  • push() & pop()

  • unshift() & shift() :unshift 在 array 头部添加元素,shift 在头部删除元素

  • sort()

  • reverse()

  • splice()

    var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
    // 从索引2开始删除3个元素,然后再添加两个元素:
    arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
    arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
    // 只删除,不添加:
    arr.splice(2, 2); // ['Google', 'Facebook']
    arr; // ['Microsoft', 'Apple', 'Oracle']
    // 只添加,不删除:
    arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
    arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
    
  • concat() 连接两个 array 并且返回一个新的 array

    var arr = ['A', 'B', 'C'];
    var added = arr.concat([1, 2, 3]);
    added; // ['A', 'B', 'C', 1, 2, 3]
    arr; // ['A', 'B', 'C']
    
  • join() :和 python 一样,将 array 用一定连接符连接成 string

    var arr = ['A', 'B', 'C', 1, 2, 3];
    arr.join('-'); // 'A-B-C-1-2-3'
    

Object

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

Methods

  • obj.prop & obj[‘prop’] e.g. person.name; // ‘Bob’

    var xiaohong = {
        name: '小红',
        'middle-school': 'No.1 Middle School'
    };
    xiaohong['middle-school']; // 'No.1 Middle School'
    xiaohong['name']; // '小红'
    xiaohong.name; // '小红'
    
  • dynamic properties:

    var xiaoming = {
        name: '小明'
    };
    xiaoming.age; // undefined
    xiaoming.age = 18; // 新增一个age属性
    xiaoming.age; // 18
    delete xiaoming.age; // 删除age属性
    xiaoming.age; // undefined
    delete xiaoming['name']; // 删除name属性
    xiaoming.name; // undefined
    delete xiaoming.school; // 删除一个不存在的school属性也不会报错
    
  • in : 判断对象有没有某种属性(可能通过继承所得)

    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };
    'name' in xiaoming; // true
    'grade' in xiaoming; // false
    'toString' in xiaoming; // true
    
  • hasOwnProperty() : 判断对象是否有自身的某种属性(非继承所得)

    var xiaoming = {
        name: '小明'
    };
    xiaoming.hasOwnProperty('name'); // true
    xiaoming.hasOwnProperty('toString'); // false