《JavaScript高级程序设计》第三章笔记 - 语法&数据类型

介绍

本章主要介绍了JavaScript语言,准确来说是ECMAScript定义的一些语法基础。包括语法,关键字&保留字,数据类型,操作符,语句和函数。
由于ECMAScript的语法和C以及其他类似C的语言的语法相似,这里在一些已经熟练掌握的知识点不会展开讨论和举例。

语法

  1. 区分大小写。
  2. 标识符命名规则:
    1. 以字母,_或$开头
    2. 只包含字母,_,$,或者数字
    3. 字母包括ASCII码和Unicode字符,但不推荐使用。
  3. 关键字:
    |break |do |instanceof|typeof |
    |case |else |new |var |
    |catch |finally |return |void |
    |continue|for |switch |while |
    |debugger|function|this |with |
    |default |if |throw |
    |delete |in |try |
  4. 保留字:
    |abstract |enum |int |short |
    |boolean |export |interface |static |
    |byte |extends |long |super |
    |char |final |native |synchronized |
    |class |float |package |throws |
    |debugger |implements|protected |valotile |
    |double |import |public |
  5. 变量
    1. ECMAScript是松散类型,变量可以保存任何类型的数据。
    2. 已经被赋值的变量可以被重新赋予别的数据类型的值。
    3. var声明的变量是局部变量。

数据类型

  1. 基本数据类型(simple data type / primitive types):Undefined, Null, Boolean, Number and String.
  2. 复杂数据类型(complex data type):Object
  3. typeof操作符:返回值有“undefined”,“string”,“boolean”,“number”,“object”,“function”。但typeof Null的返回值是”object”。

Undefined

  • 只有一种值,即undefined。如果一个变量用var声明了且没有被赋值,将会得到值undefined。
  • 使用typeof判断没有赋值的变量和没有声明的变量时,都会返回“undefined”。所以建议每次声明变量时都赋值,就可以用typeof检测变量是否被声明。
  • 一般来说不推荐直接用

Null

  • 只有一种值,即null。
  • Null和Undefined存在值相等的关系。

    1
    alert(null == undefined); //return true
  • 不同于Undefined,如果一个对象object需要被赋值为null方便日后进行进一步操作,null用于赋值是合理的。

Boolean

  • true不等于1,false不等于0。
  • 类型转换
    | Data Type | true | false |
    | ————- |:————-: | —–: |
    |String | non-empty string | “” |
    |Number | non-zero number | 0 |
    |Object | any object | null |
    |Undefined | n/a | undefined|

Number

  • 基于IEEE-754标准
  • 一般为十进制,八进制以(0)开头,十六进制以(0x)开头。
  • 小数的存储空间为整数的两倍。故而如果小数的值是整数(如1.0),或者小数点后面没有值(如1.),都会以整数的方式存储。
  • 小数的运算不应该用来做判断条件,因为比如(0.1 + 0.2)的计算结果是0.30000000000004,是IEEE-754标准的通病。因此:
    1
    if (0.1+0.2 == 0.3) {}

这样的代码就并不好。

  • 最小值(Number.MIN_VALUE)是5e-324,最大值(Number.MAX_VALUE)是1.7976931348623157e308。
  • NaN表示Not a Number。比如 x / 0的运算会返回NaN。但是不会报错阻止后续程序的运行。NaN不等于任何值,包括自身。
  • isNaN()方法被调用时,会尝试将参数转化为数字,成功则返回false,否则返回true。
  • 类型转换
  1. Number()可以使用在任何数据类型上。
1
2
3
4
5
6
7
var num1 = Number(null); // return 0
var num2 = Number(undefined); //return NaN
var num3 = Number(""); // return 0
var num4 = Number(" "); // return 0;
var num4 = Number("0001"); // return 1;
var num5 = Number(true); // return 1;
var num6 = Number("hello world"); // return NaN
  1. parseInt()用来判断String可否被转化为整数。
1
2
3
4
5
6
var num1 = parseInt("12.3"); // return 12
var num2 = parseInt("123abc"); // return 123
var num3 = parseInt(""); // return NaN
var num4 = parseInt("0001"); // return 1;
var num5 = parseInt("0x3"); // return 0;
var num6 = parseInt("hello world"); // return NaN
  1. parseFloat()方法用来判断String可否被转化为小数。
1
2
3
4
5
6
var num1 = parseFloat("12.3.3"); // return 12.3
var num2 = parseFloat("123abc"); // return 123 - 整数
var num3 = parseFloat(""); // return NaN
var num4 = parseFloat("0001.2"); // return 1.2;
var num5 = parseFloat("0x3"); // return 0;
var num6 = parseFloat("hello world"); // return NaN

String

  • String是不可改变的,字符串生成后即在内存中存储,如果字符串变量被重新复制,将会为新字符串开辟存储空间,然后销毁旧字符串。
  • toString()方法适用于numbers, Boolean, objects和strings。

Object

对象主要有以下几个属性和方法:

  • constructor:构造器,用来生成对象实例。
  • hasOwnProperty(propertyName):判断对象是否有特定属性,参数需是string。
  • isPrototypeOf(object):判断对象的原型是否是另一个对象。
  • propertyIsEnumerable(propertyName):判断一个属性是否能够有for-in语句。
  • toLocaleString():返回一个字符串代表对象在执行环境中的表示。
  • toString():返回一个字符串代表对象。
  • valueOf():返回一个代表对象值得string,number或者Boolean。