[JavaScript语法学习]重新认识JavaScript

JavaScript是实现ECMAScript标准的语言,目前最新的第六版标准于2015年6月发布,简称ES6。目前大多数浏览器都只是实现了ECMAScript标准的第五版。JavaScript的运行需要一个宿主环境,浏览器是最常见的宿主环境,另外还有服务器端环境Node等等。

类型

任何一门编程语言都少不了数据类型,那么在JavaScript中的类型有:

1. Number

2. String

3. Boolean

4. Object (Function, Array, Date, RegExp)

5. Null

6. Undefined

7. Error

8. Symbol

9. Class

 

虽然说类型有很多,但是只要记住,在JS中只有两种类型:值类型,引用类型。

值类型:number, string, boolean

基本的引用类型:Array, Object, Function

其他的类型都是在ES6中被引入的,包括Class,  Symbol 等等。

另外比较特殊的类型就是 null,  undefined

于是乎这里引入了第二个问题:typeof 能够得到哪些类型值?

首先,typeof的返回值是字符串

其次,能够得到 string boolean number (三大基本类型) 和  object, function, null, undefined

第三个问题,既然typeof不能用来区分引用类型,那么我该如何来区分引用类型呢?

这时候就需要用到 instanceof 运算符,用来检测一个对象在其原型链上是否具有一个构造函数的prototype属性

更多信息请访问 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceof

 

 

Number

数字直接量:分为十进制,八进制和十六进制。但是在ES6的严格模式下,禁止使用八进制直接量。

Number对象是经过封装的能够让你处理数字值的对象,Number对象是由Number()构造器创建的。

new Number(value);

JavaScript采用IEEE754标准定义的双精度64位格式(double-precision 64-bit format IEEE754 values),不区分整数值和浮点数值,所有数字都是浮点数值表示,因此小数相加会有精度不准的问题。

 

内置对象Math处理高级数学函数和常数,内置函数parseInt()将字符串转换为整数,parseFloat()按照十进制格式解析浮点数字符串,运算符+把数字字符串转换为数值,特殊的Number值NaN进行数学运算都是NaN,内置函数isNaN()可以判断一个变量是否为NaN,Infinity, -Infinity分别表示正无穷和负无穷,内置函数isFinity()可以判断一个变量是否为正无穷,负无穷或者NaN

需要详细了解Number可访问 [JavaScript语法学习]全面介绍Number

 

String

JavaScript中的字符串是一串Unicode字符序列

需要详细了解String可访问 [JavaScript语法学习]全面介绍String

 

其他类型

null表示空值,必须使用null关键字才能访问。

undefined是未定义类型的对象,表示一个未初始化的值。变量声明但是没有赋值则表示为undefined类型

可以理解为undefined是从null派生出来的一个数据类型,所以undefined == null 为真,但是 undefined === null 为假

布尔值true,false。其他类型的变量转换为布尔值类型的规则: false, 0, "", NaN, null, undefined都转换为false 其他则为true

也可以使用Boolean()函数进行显示转换

 

最后,提到类型,肯定忘不了类型转换和类型比较。

数据转换涉及到各种类型之间相互转换的规则,而类型比较则是在前者的基础上弄明白==和===这两个比较运算符的区别。

在if语句,+运算符,==,===,!! 以及 逻辑运算 这几种情形下,都会涉及到类型转换。具体的类型转换表如下

[此处的贴图还没有制作好,对不住了]

 

变量作用域

在ES5中,语句块是没有作用域的,在JS中只有函数才有作用域。 但是从ES6开始,可以使用let, const关键字创建块作用域的变量

 

函数

函数是JS中的一等公民,如果一个函数没有return语句或者是一个没有值的return语句,则表示返回undefined

如果调用函数时没有提供足够的参数,那么缺少的参数会被undefined替代

函数体中有一个名为arguments的内部对象,是一个类似于数组的对象,但并是array数组,包括了所有传入的参数。

function add(){
    var sum = 0;
    for(var i = 0; i < arguments.length; i++){
        sum += arguments[i];
    }
    return sum;
}
add(2,3,4,5);
function svg(){
    var sum = 0;
    for(var i = 0; i < arguments.length; i++){
        sum+=arguments[i];
    }
    return sum/arguments.length;
}
svg(2,3,4,5);

return语句有个小坑: 前面两个函数执行都没有问题,最后一个返回undefined

function foo(){
    return { name: "foo"};
}

function foo(){
    return { 
        name: "foo"
    };
}

function foo(){
    return 
        { name: "foo"};
}

需要详细了解函数类型,可访问 [JavaScript语法学习]全面介绍函数

 

其他知识点

delete运算符 用于删除一个对象的属性

delete expression

delete object.property

delete object['property']

如果属性是一个不可配置的属性,那么在严格模式下删除会抛出异常,而在非严格模式下返回false.  其他情况下都返回true

只能删除自身属性,而不能删除继承属性

 

for...in循环只遍历可枚举属性,包含自身和继承的属性

propertyIsEnumerable()返回布尔值,表明指定的属性是否是当前对象可枚举的自身属性

hasOwnProperty() 判断某个对象是否含有指定的自身属性

keys() 返回由给定对象的所有可枚举自身属性的属性名组成的数组

Object.getOwnPropertyNames() 返回由指定对象的所有自身属性的属性名 (包括不可枚举属性) 组成的数组

 

posted @ 2017-07-13 22:09  小碎石  阅读(225)  评论(0编辑  收藏  举报