两年前在重温javascript红宝书《javascript高级程序设计》时,方便自己临时查阅某些忘记的基础知识,顺便用evernote整理了一下笔记。这些年在cnblogs拜读各位大神的blog,而自己没写过公开的blog。现在把笔记整理上来,希望对入门的童鞋有点点帮助~
javascript基础一,后面还有两篇哦~可能个别文字或者表达有问题,欢迎各位指出
附上evernote的公开链接:https://app.yinxiang.com/shard/s10/sh/81bef8e2-f56f-4f28-bb74-ed81f413de2c/3d14cd48699ce4a4a2cea8f55fe8f0cf
-
标识符:以字母、下划线或者美元符号开头,标识符的其他字母可以是字母、下划线、美元符号或者数字。
- 不能以保留字、关键字、true、false或者null作标识符
- js区分大小写
- var var是一个关键字
- 标识符即变量的名称
- 区分大小写
-
变量
- 定义了而未初始化(即赋值)的变量,其值为undefined。
- undefined:任何未定义或者定义了但未初始化的变量,都会保存undefined,使用未定义变量会报错
- 注意函数中定义变量为局部变量,随函数退出时销毁。
- 变量可以保存任何类型的值,而且可以随时改变保存的类型。
-
数据类型(6种)
- 5种基本(简单)数据类型:Undefined、Null、Boolean、String、Number
- 1种复杂类型:Object
- typeof操作符
- 返回一个字符串 eg:typeof "string"
- "undefiend"-这个值未定义或者未初始化
- "string"-这个值是字符串
- "boolean"-这个值是布尔值
- "number"-这个值是数值
- "object"-这个值是null或者对象
- "function"-这个值是函数
- 注意:返回的字符串是小写字母开头
-
Undefined类型
- 声明(定义)了而未初始化的变量保存着undefined值
- 未定义的变量直接使用会报错(typeof操作符例外)
- typeof 未定义的变量和typeof未初始化的变量都返回"undefined",由此typeof区分不了为定义的变量和未初始化的变量
- 变量定义后推荐立即初始化
-
Null类型
- null值表示一个空指针对象!
- 故 var car = null; alert(typeof car); 返回object 因为null其实是一个特殊的对象!
- 若一个变量准备保存对象,最好初始化为null,表示它为对象,只要检查它是否等于null就知道是否保存了一个对象的引用。即要保存对象的变量还没真正保存对象,就应该明确让变量保存null值。
- undefined派生自null,即alert(null == undefined) 返回true,但其间发生了类型转换。
-
Boolean类型
- 只有两个值:true和false,注意大小写
- 所有数据类型都有与boolean类型相对应的值,通过转型函数Boolean()实现,注意在判断条件中自动调用转型函数。
- Boolean()的转换规则(红皮书P23)
-
Number类型
- 数值表示
不是0开头表示10进制(12),0开头且以8为基数表示8进制(070),0x开头且以16为基数表示16进制(0xaf)。
- 运算时,数值始终转为十进制,结果也以十进制来表示。
- 浮点数:该数值必须只包含一个小数点,而且小数点后面至少有一位数字。
- 注意浮点数在某些情况下会自动转为整数
- 浮点数数值计算会产生舍入的误差问题,不要测试某个特定的浮点数值
- 数值范围:ECMAScript表示范围:Number.MIN_VALUE至Number.MAX_VALUE
- 超出范围,被转换为特殊的Infinity,正无穷Infinity,负无穷-Infinity
- isFinite()函数检查是否在最大和最小值之间,是则返回true,否则返回false
- NaN:非数值,表示一个本来要返回数值的操作数未返回数值的情况。
- 任何涉及NaN的操作(如NAN/0)都返回NAN,在计算中要注意
- NaN不等于任何值,包括他自身(只能通过isNaN()函数来判断是否为NaN),isNaN()尝试转换传入的参数为数值
- 数值转换
-
Number()函数:可以传入任何数值类型
- 如果是Boolean,true为1,false为0
- 数字值,简单的传入和返回
- Undefined,始终返回NaN
- Null,始终返回0? Chorme25 返回NaN
- 字符串:
-
- 只含有数字,则转为十进制,会忽略前导的0
- 含有合法的浮点数,转为浮点数,同样忽略前导的0
- 含有有效的十六进制格式(如:0xf),转为十进制返回(注意:八进制就不能识别出来,按照规则1来处理)
- 空字符串,返回0
- 字符串包含除上述的字符外,其他都转为NaN
- 对象:先调用valueOf()方法,按照前面的规则处理,如果是NaN,则再调用toString()方法,再次按照规则处理。
- parseInt()函数:只能转入字符串,原理:看是否符合数值模式
- 他会忽略开始的所有空格,找到第一个非空格字符
- 找到的第一个字符不是数字字符或者是负号,则返回NaN
- 注意:空字符串parseInt()返回非数值NaN,而Number()返回0
- 如果第一个字符是数字字符,则会解析到不是数字字符为止,注意:小数点不是有效的数字字符!
- parseInt()能识别各种整数格式(八进制、十进制、十六进制),注意Number()函数只能识别十进制、十六进制
-
- eg: parseInt("0x15") 返回21(16*1+5)
- eg:parseInt("07") 返回7,当做十进制的7
- parseInt()还能指定转换基数,即返回何种整数格式,eg:parseInt("010",8);返回8,结果也以八进制返回
-
- 注意:指定基数时,是指把待处理字符串显示输出为指定的进制
- 区别:number.toString()中,number被识别为十进制,而且number一定为Number类型,之后再按照传入的基数返回toString()的值
- parseFloat()函数:只能转入字符串
- 与parseInt()类似,忽略前导的0,找到第一个合法的浮点数字字符,小数点是合法的,故可以是以小数点作为第一个字符
- 区别:parseFloat()可以识别所有浮点格式(指科学计数法,返回的不是科学计数法的形式),但只能解析十进制值,任何十六进制都会转为0,八进制按照十进制方式解析,因为八进制是以0作为前导
- parseFloat()没有转换基数
- parseFloat()可以解析包含合法整数的字符串
-
Number()函数:可以传入任何数值类型
- 数值表示
不是0开头表示10进制(12),0开头且以8为基数表示8进制(070),0x开头且以16为基数表示16进制(0xaf)。
-
String类型
- 字符字面量
- 转义序列 eg: \b(空格) \n(换行) \‘ \"(转义单、双引号)
- 具有长度属性length,对于单字节字符有效,双字节字符不精确
- 特点:字符串是不可变的,一旦创建,他们的赋值就不能改变,要改变,必须销毁原来的字符串,再用新值得字符串填充该变量。
- 转为字符串的方法。
- toString()方法。
- 每个字符串都有toString()方法,除了null、undefined值没有这个方法,其他的值都有。
- 对于Number类型调用时,可以传入输出数值的基数。即返回指定有效进制的字符串值,eg: 10..toString(8) 返回8,10.toString()返回10,默认基数为10。这样就为表示各种进制数时提供了方便!但只有十进制Number能调用toString()方法,其他进制的Number类型一律当成十进制!即,把数值输出成个种进制的表示方式!注意Number..toString()与Number.toString()的区别
- 传入数值的基数后,返回的是指定的进制表示的数值,但为了完整表示该进制,必须给八进制和十六进制分别添加0和0x作为开头
- String()方法。
- 任何类型的值都能转为字符串,但null、undefined同样没有
- 转换规则:先调用toString()方法,若则调用String()方法
- String()方法不能传参
- toString()方法。
- 字符字面量
-
语句
- 注意:不存在其他语言一样的块级作用域,所有流程控制语句中定义的变量都可以被流程控制外访问到。
- if语句:条件可以是表达式,表达式求值的结果可以不为布尔值,那就会自动调用Boolean()来转换求值的结果而得到布尔值
-
for-in语句:是一种精准的迭代语句,可以枚举对象的属性。
- eg: var obj = { a: 1, b: 2}; for(key in obj){ console.log( obj[key] ) } // 1 \n 2
- 注意,key是字符串类型,故不能用点的方式来访问,必须用对象的方式来访问
- switch语句:
- switch()中的参数可以是任何数据类型,数值、字符串、对象都可以。
- case中的值不一定是常量,可以是变量或者表达式
- switch中执行的全等操作符,不会发生类型的转换