JavaScript高级程序设计2,学习笔记---第二篇
第三章.
1.区分大小写,标识符:第一个字符必须是字母,下划线,或美元符,其他字符可以是字母,下划线,美元符或数字。按照惯例,ECMAScript采用驼峰式---最佳实践。不能把关键字,保留字,true,false,和null用做标识符。{}推荐使用,即使只有1行代码。
注意var定义变量不要省略,省略了会成为全局变量。
2.五种基本数据类型:Undefined,Null,Boolean,Number,String.复杂数据类型-Object,本质是一组无序的名值对。技术角度,函数也是对象。
typeof检测数据类型,undefined-未定义,boolean-布尔值,string-字符串,number-数值,object-对象或null,function-函数。
Undefined,定义了变量未初始化的,和未定义的用typeof检测都是undefined,建议对所有变量进行初始化。
Null,逻辑上讲,null是空对象指针,typeof null 返回object,变量用于保存object的话初始化时null。undefined派生自null,alert(null == undefined) 返回true。
Boolean,所有类型都可以用Boolean()函数转型,
数据类型 转换为true的值, 转换为false的值
Boolean true false
String 任何非空字符串 "" not " "
Number 任何非零数字值包括无穷大 0和NaN
Object 任何对象 null
Undefined 不适用 undefined
Number,表示整数和浮点数值,基本的是十进制的,八进制第一位必须是0,如果数字超出范围,前导零会被忽略,当成10进制了,十六进制前面两位必须是0x,算数计算时,都会被转换十进制。
1.浮点数,浮点数在内存空间占用时整数的两倍,所以ECMAScript不失时机的将浮点数转化为整数。浮点最高进度是17位小数,浮点数计算时精度远不如整数,所以永远不要测试某个浮点数值。基于IEEE754的浮点数计算都有问题。0.1+0.2!=0.3.6个0以上的浮点数值会自动以e表示法表示。
2.数值范围,ECMAScript能保存的范围是Number.MIN_VALUE---Number.MAX_VALUE.超出的转换成Infinity. 正无穷。isFinite()测试是否在最大值和最小值之间。
3.NaN,即非数值(Not a Number),ECMAScript 任何数除以0都得NaN,不会执行出错。任何涉及NaN的操作都得NaN,alert(NaN==NaN)得false.isNaN()接受一个参数,能转为数字的直接转数字,范围false,不能转的这个函数范围true。应用于对象,先调用valueOf(),不能转为数字的,再调用toString().
4,数值转换,Number()可以把任何数据类型转换为数值,parseInt()和parseFloat()专门用于把字符串转换为数值。转换字符串用parseInt(),区别:Number()解析会忽略前导0,parseInt不会。而作为不同的进制。parseFloat也会忽略掉前导0.parseFloat可以返回整数。
String,数值,布尔值,对象,字符串值,都有toString(),null和undefined没有这个方法。调用数值的toString(),可以传参数制定基数。String()可以将任何数据类型转换为字符串。
Object,一组数据和功能的集合。每个Object都有一些属性和方法。
5.操作符,略
ECMAScript中参数都是值传递,而不是通过引用传递。
第四章、变量,作用域和内存问题
一。1、栈内存--基本数据类型(String在ECMAScript中是基本类型,而不是对象),按值访问;堆内存,放引用类型,变量中保存的是一个指针,指向一个位置,保存对象。
二,只有引用类型才可以定义属性。
访问变量有按值和按引用两种方式,而参数只能按值传递。
web浏览器中,window是全局执行环境,所有全局变量和函数都对应window的属性和方法。
JS没有块级作用域,if,for中定义的变量后边代码也可以使用。
访问局部变量比全局变量快,因为不用向上搜索作用域链。
及时解除不再使用的全局对象,全局对象属性以及循环引用变量,可以更好的利用内存,浏览器分配的内存一般小于桌面应用程序。