《Javascript高级程序设计》--读书笔记(一)

HTML中使用Javascript

<script>元素

`<script>`是像html中插入javascript的主要方法
参数 解释
async 可选,立即下载,不妨碍其他操作,在load事件前执行,不保证顺序
charset 指定代码字符集
defer 延迟至文档完全被解析和显示后再执行,延迟脚本先于DOMContentLoaded
language 已废弃
src 可选,外部js地址
type 可选,类型text/javascript

外部文件xhtml:<script type="text/javascript" src=""/>
html:<script type="text/javascript" src=""></script>
<noscript></noscript>中的内容只会在不支持脚本,支持但被禁止的浏览器中显示。

基本类型

 ECMAScript有5种基本数据类型:Undefined,Null,Boolean,Number,String.
  • typeof 操作符
    typeof返回字符串,主要用于中检测值类型

    • “undefined”—–如果这个值未定义
    • “boolean”——如果这个值是布尔值
    • “string”——如果这个值是字符串
    • “number”—-如果这个值是数字
    • “object”—–如果这个值是对像或null
    • “function”——如果这个值是函数

    Safari5以下,chrom7以下对正则表达式调用typeof时返回”function”,而其他浏览器返回”object”.
    typeof 检查类型是,对变量未赋值和未声明变量都会返回“undefined”。

  • Undefined类型

       Undefined类型只有一个特殊的undefined值,使用var声明变量未赋值,默认undefined.
    
  • Null类型

       Null类型只有一个特殊值null .null值表示一个空指针,因而typeof返回“object”。而undefined派生与null值,ECMA-262规定null和undefined相等测试返回True
    
  • Boolean类型

       此类型有两个字面值:true和false. True和False不是布尔值,是标识符区分大小写。ECMAScript中所有类型都可以转换成Boolean值。
    

    各种数据类型通过Boolean()函数转换成Boolean。规则如下:

数据类型 转换为true 转换为false
Boolean true false
String 任何非空字符串 “”空字符串
Number 任何非0数字 0和NaN
object 任何对像 null
Undefined n/a undefined
  • Number类型

    使用IEEE745格式来表示整数和浮点数值。
    
    • 整数

        var intNumber = 50;//十进制
        var intOrdNumber = 016;//八进制
        var inthexNumber = 0x1A;//十六进制
    • 浮点数

       浮点数值最高精度17位小数,永远不要测定某个特定的浮点数值。
      
      var floatNumber = 1.1;
      var floatnumber = 3.1415e7;//等效于31415000
    • 数值范围

      ECMAScript能够表示的最小数值Number.MIN_VALUE 最大值Number.MAX_VALUE 超出范围转成Infinity。判断数值是否超出范围isFinite()函数
      
    • NaN

       即非数值(Not a Number)是个特殊值。表示一个本来要返回数值的操作数未返回数值的情况。例如:5/0 ;涉及NaN操作都返回NaN。NaN不等于任何值,包括本身。
      

      isNaN()接受任意一个参数,会试图转换成Number类型,不能转换返回ture

    • 数值转换

      1. Number()接受任何类型参数
          Boolean :tru和false分别转换为1和0
          数字值:简单传入返回
          null:0
          undefined:NaN
          字符串:只包含数字(符号)转换为十进制,忽略开头0
                       只包含浮点格式,转为浮点数
                       只包含有效 十六进制格式转换为大小相等的十进制
                       空字符串,转换为0
                       除此之外全为NaN
          object:调对像的valueOf()方法,依照前面规则,若结果为NaN,则调用对像的toString(),再次依照前面规则。
       2. parseInt() 参数为字符串
           空字符为NaN
           只识别字符串中的数字忽略字符能识别进制数
          ECMAScript3,5对于8进制存在差异,5不能解析8进制,应指定进制
          parseInt("0x11",16);
       3. parseFlaot()
          用法和paseInt()一样,不过始终忽略开头的0
      
  • String类型

    string和java的string类似,不可变,多个字符串连接,创建数组,通过.join()方法拼接。除null和undefined没有toString()方法,其他类型都有。toString()可指定进制数,将数字按相应进制输出。String()类型转换null输出"null" ,undefined输出“undefined”,其他和toString()一样。
    
  • Object

    ECMAScript中的对象是一组数据和功能的集合。对象可通new操作符创建。
    

    Object属性和方法

    名称 作用
    Constructor 构造函数
    hasOwnProperty(propertyName) 判断属性在当前对像中是否存在
    isPrototypeOf(object) 判断传入对象是否为另一个对象的原型
    propertyIsEunmerable(propertyName) 判断属性是否能枚举
    toLocaleString() 返回与环境对应的对像的字符串表示
    toString 返回字符串表示
    valueOf() 返回对像的字符串,数值,布尔值表示
  • 操作符
    大致和java中类似。
    注意
    1. 进行运算符操作时会按照Number()规则转换成numner进行操作.
    2. 任何对像,boolean测试始终为true.
    3. 空字符串,boolean测试为false.
    4. Infinity ,boolean测试为true.
    5. null,undefined,NaN,boolean测试为false

  • 语句

     语法和其他语言类似。for-in操作前应判断对像是否为null和undefined,不然抛错误,Safari3以前有BUG会导致某些属性被返回两次。label给代码添加标签一般和for配合使用。
    

    注意:

    1. javascript没有块作用域。
    2. 开发中不要使用with会使性能下降。
    3. switch可接受任意类型,case可以是变量或表达式
    4. function类似其他语言中方法
    5. 没有重载
    6. 参数可以任意类型,调用可以传任意参数,ECMAScript中参数在内部是用类似Aarry的对象argument.通过length属性来判断参数个数,通过这个特性可以模拟类似重载。

变量,作用域和内存问题

5种基本类型都是按值引用的,对象引用类型。

ECMAScript中所有函数的参数都是按值传递的

在向参数传递基本类型的值时,被传递的值被复制给局部变量。在向参数传递引用类型的值时,会把其内存地址复制给局部变量,这个局部变量的变化会反映到函数外部。
 function addTen(num){
     num+=10;
     return num;
 }
 var count = 20;
 var result  = addTen(count);
 alert(count);//20
 alert(result);//30
 function setName(obj){
    obj.name="Jon"
 };
 var person={};
 person.name = 'Tome';
 alert(person.name);//"Tome"
 setName(person);
 alert(person.name);//"Jon"
  • 检查类型
    typeof检查基本类型是得力助手,ECMAScript提供instanceof 检查引用类型的类型。其语法如下:

     reuslt = variable instanceof constructor
    

    在safari5以下Chrome7以下typeof检查正则时返回”function”,IE和Firefox中返回“object”

    ECMA-262规定任何内部实现[[call]]方法的对象都应该在应用typeof 时返回”function”

  • 执行环境及作用域

    执行环境 定义了变量或函数有权访问的其他数据,决定他们各自的行为。每个执行环境都有一个与之关联的变量对像(variable object),环境中定义的所有的变量和函数都保存在这个变量中。

    每个环境都可以向上搜索作用链,以查询变量和函数名;但任何环境都不能向下搜索作用链而进入另一个执行环境。
    try–catch;with可以延长作用链。

原文地址:https://www.cnblogs.com/jcheng996/p/5401482.html