《Javascript高级程序设计》学习记录(一)

最近又开始重新阅读《javascript高级程序设计》了,记忆中这是第三次了,但是前面都是走马观花式的过了,这次还是需要好好整理和实践一番了。

虽然是一些基础概念,但是还是有好多容易注意的地方,不知道它的玄机还有这么多,特在此记录一下,防止自己忘记,同时也能增加自己的理解

(1)javascript中共有5种简单的数据类型:Undefined,Null,Boolean,Number,String,一种复杂的数据类型Object

(2)typeof操作符

在javascript中,typeof和instanceof是两个很值得讲的点,要记住typeof不是函数而仅仅是简单的操作符,其中有两点需要注意:

1:typeof(null)返回的是Object,因为null被认为是一个空的对象引用

2:typeof(function)会返回function

(3)对于null和undefined值,它们有很多共同点:

1:在对它们进行相等操作符的时候:alert(null == undefined)时返回的是true,

2:Null和Undefined数据类型都只有一个值,分别就是null和undefined

3:undefined和null在对它们进行Boolean()强制类型转换的时候,返回的都是false

4:null和undefined都没有toString()函数。

(4)在进行Boolean()强制类型转换的时候,false,"",0,NaN,null,undefined都会转换为false,其他的都会转换为true

(5)Number类型

1:由于保存浮点数值需要的内存空间是整数数值的两倍,所以js会自动将浮点数转化为整数类型(如果可以的话)

2:js在进行浮点运算的时候会出现精度过低的bug,导致0.1+0.2之后得到的不是0.3,所以在进行浮点运算的时候要格外小心

3:一旦某一次运算出现了+Infinity或者-Infinity,那么该值将无法继续擦参与下一次的计算,因为Infinity是不能参与运算的

4:对于NaN来说,任何设计NaN的操作都会返回NaN,NaN和任何值都不相等,包括自身,所以在执行下面的操作的时候,返回的将是false:

Alert(NaN==NaN);

5:Number()可以将任何数据类型转为数值类型,而parseInt和parseFloat只能将字符串转化为数值类型

对于Number来说,

Number(null);返回0   Number(“”)返回0

Number(undefined)返回 NaN

对于parseInt来说,

parseInt(“”); 返回NaN

parseInt可以转化8进制和16进制的值,但是在ECMAScript5中,parseInt没有转化8进制的能力了

对于parseFloat来说,它只能解析十进制的数值,所以他没有用第二参数指定基数的用法

(6)逻辑与和逻辑或操作

与:1:当第一个操作数是对象,则返回第二个操作数

2:当两个操作数都是对象的时候,则返回第二个操作数

3:如果有一个NaN操作数,则返回null,

4:如果有一个操作数是undefined,则返回的是undefined

则执行下面的操作的时候,返回的是2

Alert(1.&&2);

或:1:当第一个操作数是对象的时候,返回的是第一个操作数

2:当两个操作数都是对象的时候,返回的是第一个操作数

3:如果有一个NaN操作数,则返回null,

4:如果有一个操作数是undefined,则返回的是undefined

则执行下面的操作的时候,返回的是1

Alert(1||2);

(7)加减乘除运算符

乘:1:Infinity和0相乘的时候,结果为NaN

2:Infinity和非0数值相乘,返回的是Infinity

除:  1:如果是零被零除,结果是NaN

2:Infinity被Infinity除,结果是NaN

加: 1:Infinity和-Infinity相加,结果为NaN

2:+0和-0相加,结果为+0

减 1:-Infinity和Infinity相减,结果为NaN

(8)在一个函数中,位于return语句之后的任何代码都永远不会执行

(9)Js中没有函数的重载,即使两个函数定义为相同,后面的那一个永远会覆盖前面的那一个

时间: 2024-08-29 00:51:14

《Javascript高级程序设计》学习记录(一)的相关文章

JavaScript高级程序设计学习笔记--错误处理与调试

try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function testFinally(){ try{ return 2; }catch(error){ return 1; }finally{ return 0; } } 调用这个函数会返回0(PS:但我实际执行的时候会先返回0,再返回2) 抛出错误 与try-catch语句相配的还有一个throw操作符,用于

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var

Javascript高级程序设计学习笔记

3. 基本概念 基本数据类型:Undefined,Null,Boolean,Number,String. 复杂数据类型:Object. 3.6 语句 switch比较值时用的是全等运算符 “===” ,因此不会进行类型转换.例如 “10” 不等于10. 3.7 函数 ECMAScript函数不介意传递进来多少个参数,也不在乎参数的类型.即使定义的函数只接受两个参数,在调用的时候也可以传递任意多个或者0个.因为ECMAScript的参数在内部是用一个数组表示的,在函数体内部可以通过argument

JavaScript高级程序设计学习笔记--高级技巧

惰性载入函数 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中,看看下面来自上一章的createXHR()函数. function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeo

JavaScript高级程序设计学习笔记--DOM

DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Element,ProcessingInstruction或Comment,但还有两个内置的访问其子节点的快捷方式.第一个就是documnetElement属性,该属性始终指向HTML页面中的<html>元素.另一个就是通过childNodes列表访问文档元素,但通过documentElement属性则

JavaScript高级程序设计学习笔记--BOM

window对象 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMScript规定的Global对象. 全局作用域 由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量.函数都会变成window对象的属性和方法.来看下面的例子: var age=29; function sayAge(){ alert(this.age); }

JavaScript高级程序设计学习笔记--引用类型

Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name,age和5.但这里的数值属性名会自动转换为字符串. 对象属性的访问:点表示法和方括号语法 alert(person["name"]); // "Nicholas" alert(person.name); // "Nicholas" 从功能上看,这两

JavaScript高级程序设计学习(三)之变量、作用域和内存问题

这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于java中涉及到jvm,因此可以自动垃圾回收和内存分配,而不需要手动. 一.变量 每个变量都有其类型,数据类型.在java中分基本数据类型和引用数据类型,js同样如此. 面试题:java的基本数据类型有哪些,及其所占字节?引用类型有哪些? java基本数据类型分别为int(4),float(4),dou

JavaScript高级程序设计学习(四)之引用类型

在javascript中也是有引用类型的,java同样如此. javascript常见也比较常用的引用类型就熟Object和Array. 一个对象和一个数组,这个在前后端分离开发中也用的最多.比如ajax传参,有时我不仅仅只是需要一个参数,例如添加方法,传的是一个对象,对象存在属性.在java中对象也可以说类.因为类存在属性,例如人类,他的属性有身高,体重,姓名,年龄,性别等.而js对象,也可以这样,比如车,它可以有品牌,颜色,造型等等. js对象可以做什么呢?同java对象有什么区别呢? 第一