《深入理解JavaScript》——Day1

本文从等号用法、语句与表达式等方面入手,详细解析JavaScript的基础知识点,并介绍保留字、值、原始值与对象的区别及特点等内容。

学习了几天《JavaScript设计模式》后,发现虽然这个人写的书还是不错的,但貌似其中的代码普遍带有bug,导致无法运行,而我也不会调试,说明我JavaScript的基础还是不够好,在图书馆里找到了这本书,今天我就开始学习这本书,对JavaScript这门灵活的语言有一个更加深入的理解!Let`s Start!

第一章  基础JavaScript

导读:在刚开始学习JavaScript的时候,用它来进行编程感受。这是作者定义的一个JavaScript子集,是我们在学习的时候更有效率。

 

1.首先注意等号的用法:

一个等号(=)用于变量赋值

三个等号(===)用于比较两个值

2.语句和表达式

●  语句“做事情”。例如这个语句,它用来声明(或创建)一个变量foo: var foo;

●  表达式产生值。它们通常是函数的参数,或是赋值的右半部分。例如: 3 * 7;

3.保留字

以下标识符作为保留字,不能作为变量名使用:

argumentsbreakcasecatch
classconstcontinuedebugger
defaultdeletedoelse
enumexportextendsfalse
finallyforfunctionif
implenmentsimportininstanceof
interfaceletnewnull
packageprivateprotectedpublic
returnstaticsuperswitch
thisthrowtruetry
typeofvarvoidwhile

 还有3个标识符不是保留字,但是需要视为保留字: Infinity、NaN、undefined。

4.值

在JavaScript中,所有的值都有属性。每一个属性都有一个key(或name)和一个value。可以认为属性就像是一条记录的字段。

例如字符串‘abc’有length这个属性:

‘abc’.length  // 3

5.原始值和对象

JavaScript中,对值得区分有点自由:

●  原始值(primitive)包括布尔值、数字、字符串、null和undefined。

●  其他的值都是对象(Object)。

这两者最主要的区别在于它们的比较方式;每个对象都有唯一的标识且只(严格地)等于自己

var obj1 = {};  // 一个空对象
var obj2 = {};  // 另一个空对象
console.log (obj1 === obj2);  // false

我:这其中包含了更加底层的原理,比如堆内存和栈内存的区别,和Object.prototype和__proto__的指向问题等,以后再来做解释,先留个坑。

相反,所有的原始值,只要编码值相同,则被视为相等:

var a = 'abc';  // 一个字符串
var b = 'a' + 'b' + 'c';  // 另一个字符串
console.log ( a === b );  // true
var a = 123;  // 一个数字
var b = 123;  // 另一个数字
console.log ( a === b );  // true

而原始值具有以下特点:

(1)  按值进行比较。如上面的例子。

(2)  不可改变。也就是说:原始值一旦创建,其属性不能被改变、添加或移除。

var a = 'abc';

delete a.length;  // 无效

a.length = 1;
console.log (a.length);  // 3

a.foo = 2;
console.log (a.foo);  // undefined

对象具有以下特点:

(1)  按引用进行比较。每个值都有各自的身份标识。

console.log( {} === {} );  // false

var obj1 = {};
var obj2 = obj1;
console.log( obj1 === obj2 );  // true

(2)  默认可变。对象属性可以很自由的被改变、添加和移除。

var a = {};

a.x = 1;  // 添加
console.log ( a.x );  // 1

a.x = 2;  // 改变
console.log ( a.x );  // 2

delete  a.x;  // 删除
console.log ( a.x );  // undefined

6. undefined和unll

●  undefined的意思是“没有值”。

① 未被初始化的变量即为undefined:

var foo;
console.log ( foo );  // undefined

② 丢失的参数也是undefined:

function f ( x ) {
    return x;
}
console.log ( f() );  // undefined

③ 访问不存在的属性,也会得到undefined:

var a = {};
console.log ( a.x );  // undefined

●  null的意思是“没有对象”或“空指针”。

注意:undefined和null没有属性,甚至连toString()这种标准方法都没有!

7. 使用typeof和instanceof对值分类

(1) typeof

用法: typeof value

它的返回值会是一个表示这个值“类型”的字符串。typeof的所有结果如下:

操作数结果
undefinedundefined
nullobject
布尔值boolean
数字number
字符串string
函数function
所有其他的常规值object

(2) instanceof

用法: value instanceof Constructor

如果value是一个通过Constructor构造器创建的对象,则返回true:

console.log( [] instanceof Array );  // true
console.log( {} instanceof Object );  // true
console.log( [] instanceof Object );  // true

我:由此我们可以看出,使用typeof时,如果遇到数组,那么typeof的结果为object,那么我们就不知道它是否是一个数组。因此我们可以用instanceof来判断该对象是否为数组。

另,下面的例子看出typeof null === object只是JavaScript设计上的一个bug(属于历史遗留问题), 它不属于对象。

console.log( null instanceof Object );  // false

8. 布尔值

(1) 注意:以下的值会被解释成false:

●  undefined、null

●  布尔值:false

●  数字: -0、NaN

●  空字符串: ‘’

除此之外的所有值都会解释成true。

(2) 二元逻辑运算符(&&和||)

JavaScript中的二元逻辑运算符是短路的。因为如果第一个运算数就足以确定结果,则不会对第二个运算数进行评估。

与(&&)—— 如果第一个运算数为假,返回它。否则,返回第二个运算数。

或(||)—— 如果第一个运算数为真,返回它。否则,返回第二个运算数。

9. 数字

JavaScript中所有的数字都是浮点数:

console.log( 1 === 1.00 );  // true

这里要提及一个Infinity,多数情况下是一个错误的值:

console.log( 3 / 0 );  // Infinity

注:Infinity比任何一个数都要大(NaN除外)。同样的,-Infinity比任何数都要小(NaN除外)。这使得这两个数字常用来作为默认值(比如当你需要一个最小值和一个最大值的时候)。
我:例:

function max() {
    var max = Number.NEGATIVE_INFINITY;
    for ( var i = 0; i < arguments.length; i++ ) {
        if ( arguments[i] > max ) {
            max = arguments[i];
        }
    }
    return max;
}
var large = max( 610,1330,200,500,654 );
console.log( large );

10. 运算符

其他的比较简单,不在这里赘述。注意的是一个技巧:转变为数字: +值。

11. 函数

函数可以用函数声明的方式创建:

function add( param1 , param2 ) {
    return param1 + param2;
}

也可以使用函数表达式的方式创建:

var add = function ( param1 , param2 ) {
    return param1 + param2;
};

其中函数声明具有提升特性——它们的实体会移动到所在作用域的开始处。

我:详情参考《你不知道的JavaScript(上卷)》

12. 特殊的变量arguments

在JavaScript中,函数的所有参数都可以被自由调用,它会通过arguments变量来使所有参数可用。它看起来像是一个数组,但它却不具备数组的方法,它只是一个类数组的变量。

它有length属性和可以用[]访问它的元素。但除此之外,它不具备其他的数组的方法。

13. 变量作用域和闭包

我:详情参考《你不知道的JavaScript(上卷)》

剩下的内容就是简单的介绍了,不一一写上来了。详情我后面会每一节每一节的详细叙述。

 

转载于:https://www.cnblogs.com/luohaoran/p/5959316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值