javascript权威指南学习笔记(1)--类型、值和变量
来源:互联网 发布:淘宝频繁退货会怎样 编辑:程序博客网 时间:2024/05/23 00:06
1、数据类型:原始类型(primitive type) 和对象类型(object type)
- 原始类型包括数字、字符串和布尔值;
- 除数字、字符串、布尔值、null(空)、undefined(未定义),其它都属于对象类型。
- 也可以分为可变(mutable)类型和不可变(immutable)类型。数字、字符串、布尔值、null和undefined属于不可变类型。
2、值
非数字值用NaN表示,函数isNaN()用于判断一个值是否是非数字,如果参数是NaN或非数字值,返回true。
函数isFinite()在参数不是NaN、Infinity(无穷大)、-Infinity(负无穷大)的时候返回true。
3、全局对象
包括全局属性(全局变量属于全局属性)、全局函数、构造函数、全局对象。
全局函数如isNaN()、parseInt()等,构造函数如何Date()、RegExp()、String(),
全局对象如Mah、JSON。
新页面加载时将会创建一个新的全局对象,并定义初始属性,如上。
4、包装对象
定义:存取字符串、数字或布尔值的属性时创建的临时对象称为包装对象。
null、undefined没有包装对象,访问它们的属性会造成一个类型错误。
字符串、数字和布尔值可以通过String()、Nmber()和Boolean()构造函数来显式的创建包装对象。
一般情况下,比如我们在访问字符串的属性时,都是通过 “.” 操作符来访问,如下:
console.log("hello world".length);console.log("this a string".indexOf("a"));
其实在调用这些方式或属性时js内部隐式的为我们创建了一个包装对象。如下:
console.log(new String("hello world").length);console.log(new String("this a string").indexOf("a"));
隐式和显式的区别:
两者并不相等。如下:
var a1 = "test", a2=new String("test");console.log(a1 == a2);//trueconsole.log(a1 === a2);//false
隐式创建的包装对象,在使用完后之后就会被抛弃了,如:
test.a = "hello"; //隐式创建包装对象,用完即时销毁console.log(test.a); //undefined 新创建一个包装对象,未初始化
用处:
有的浏览器性能不是很好,比如说低版本IE,当频繁处理字符串、数字时,效率会很低。
所以有时不如直接显式创建包装对象,防止浏览器过多地创建隐式的包装对象,提升性能。
//不推荐使用种方法var example = "this is a example"; //推荐使用这种方法,提升性能。var example2 = new String("this is a example");
5、类型转换
1. 显式类型转换
可以通过Boolean()、Number()、String()或Object()函数。
2. 对象转换为原始值
所以对象都继承了toString()和valueOf()两个转换方法。
(1)对象到字符串的转换步骤
- 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,这个值转换为字符串。
- 如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么javascript会调用valueOf()方法,如果存在这个方法,javascript会调用它,如果它返回一个原始值,这个值转换为字符串。
- 否则,javascript无法从toString()或valueOf()获得一个原始值,因此它将抛出一个类型错误异常。
(2)对象到数字的转换步骤
- 与对象到字符串转换做相同的事情,只是它会首先尝试使用valueOf()方法。
如果将对象和一个原始值比较,则转换遵循对象到原始值的转换方式进行。
3. 在做算术运算的时候,如果其中一个操作数是对象,javascript会将对象转换为原始值,不管得到的原始值是否直接使用,都不会进一步转换为数字或字符串。
如:
var now = new Date(); typeof(now + 1); //将日期转换为字符串 (字符串的拼接)typeof(now - 1); //使用对象到数字的转换now == now.toString() //true:隐式和显式的字符串转换now > (now - 1) //将日期转换为数字(隐式)
默认情况下,日期对象在转换为原始值时,会优先使用toString()方法(隐式)。在对日期对象执行加法运算时,要显式的将日期对象转换为数字,才能运算。
6、作用域
- 变量作用域
全局变量拥有全局作用域。
在函数体内,局部变量的优先级高于同名的全局变量。 - 函数作用域
在函数内声明的所有变量在函数体内始终是可见的。 - 属性变量
使用var声明一个变量时,创建的这个属性是不可配置的。无法通过delete运算符删除。
没有使用严格模式给一个未声明的变量赋值,javascript会自动创建一个全局变量,这种方式创建的变量是可配置属性,可以删除它们:
var trueval = 1; //声明一个全局变量fakeval = 2; //创建一个全局变量this.fackval2 = 3; //同上delete trueval //false 变量没有被删除delete fakeval //true 变量被删除delete this.fackval2 //true 变量被删除
- javascript权威指南学习笔记(1)--类型、值和变量
- JavaScript基础学习之-JavaScript权威指南-第三章类型、值和变量(2)
- JavaScript基础学习之-JavaScript权威指南-第三章类型、值和变量
- 《JavaScript权威指南》学习笔记——类型,变量与值
- JavaScript权威指南 第三章 类型 值和变量
- JavaScript权威指南学习之第3章 类型、值和变量
- JavaScript权威指南第03章 类型、值和变量(1)
- javascript权威指南学习笔记-客户端javascript(1)
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.10 变量作用域
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.8 类型转换
- 《Javascript权威指南》学习笔记二之变量
- 《Javascript权威指南》学习笔记二之变量
- Javascript权威指南学习笔记1:第一章
- Javascript权威指南学习笔记(一)
- 笔记:JavaScript权威指南学习(一)
- JavaScript权威指南学习笔记(一)
- 《JS权威指南》学习笔记(一):类、值和变量
- JavaScript权威指南第03章 类型、值和变量(2)
- [转]AndroidTips]修改preference中view属性
- KERAS_技巧
- [转]Java中字符串在不同字符编码中所占字节数
- 回声消除相关信息
- sh 脚本备份oracle metadata
- javascript权威指南学习笔记(1)--类型、值和变量
- AIDL 编译报can be an out parameter, so you must declare it as in, out or inout原因探究
- Android中各种消息监听机制
- 24位色BMP文件的简单分析及示例程序
- android如何在activity启动的时候隐藏输入法软键盘?
- 用rm递归递归删除子目录下所有.o后缀文件
- [转]android.mk中引用第3方 jar包的方法
- Vim实现批量注释的方法
- 关于在enum中使用#define的意义