代码改变世界

javascript 基础一

2014-05-13 15:39  屁颠屁颠攻城湿  阅读(1078)  评论(4编辑  收藏  举报

  两年前在重温javascript红宝书《javascript高级程序设计》时,方便自己临时查阅某些忘记的基础知识,顺便用evernote整理了一下笔记。这些年在cnblogs拜读各位大神的blog,而自己没写过公开的blog。现在把笔记整理上来,希望对入门的童鞋有点点帮助~

  javascript基础一,后面还有两篇哦~可能个别文字或者表达有问题,欢迎各位指出  

  附上evernote的公开链接

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