• 第三章 数据类型


    变量

    使用var定义的变量是局部变量

    省略var所定义的变量是全局变量

       

       

    typeof

    typeof操作符

    typeof是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必需的。

       

       

    数据类型

    ECMAScript中有5种简单数据类型(也称为基本数据类型):UndefinedNullBooleanNumberString

    使用typeof可能返回以下值:

       

    "undefined"——如果这个值未定义;

    "boolean"——如果这个值是布尔值;

    "string"——如果这个值是字符串;

    "number"——如果这个值是数值;

    "object"——如果这个值是对象或null

    "function"——如果这个值是函数。

       

       

    undefined

    该类型只有一个值,为初始化的变量的值就是undefined

    未初始化未声明的变量使用typeof,都会返回undefined

       

    null

    该类型只有一个值null。

    null类型表示一个空对象指针,故使用typeof返回object。

    位于nullundefined之间的相等操作符(==)总是返回true,不过要注意的是,这个操作符出于比较的目的会转换其操作数(本章后面将详细介绍相关内容)。

     

    Boolean

    该类型只有两个值。

    转型函数Boolean()可以将其他数据类型转换为Boolean 

    以下是转换规则

    数据类型

    转换为true

    转换为false

    Boolean 

    true

    false 

    String 

    任何非空字符串

    空字符串""

    Number

    任何非零值

    0和NaN

    Object

    任何对象

    null 

    Undefined 

    不适用

    undefined 

     

    Number

    1.整型:

    八进制:012

    十六进制:0x1f

       

    2.浮点数值:最高精度17位

       

    3.NaN:计算产生错误的返回值,它不与任何值相等包括自身

    isNaN()函数确定参数是不是数值或是否可以被转换成数值,若不可以返回true:

    alert(isNaN(NaN)); //true

    alert(isNaN(10)); //false10是一个数值)

    alert(isNaN("10")); //false(可以被转换成数值10

    alert(isNaN("blue")); //true(不能转换成数值)

    alert(isNaN(true)); //false(可以被转换成数值1

    isNaN也可用于对象,该函数会调用对象的valueOf方法,确定返回值是否可以转为数值,若不能再调用toString()测试其返回值

       

    4.数值转换

    三个函数可以将非数值转换为数值:Number(),parseInt(),parseFloat()

    Number()

    Boolean:true-->1,false-->0

    null:0

    undefined:NaN

    字符串:空字符串-->0

    "00021"-->21(0被忽略,不会视为八进制)

    "0x21"-->对应的十进制

    其余:NaN

    对象:调用valueOf()方法,根据前面规则返回值。如果返回NaN,再进一步 调用toString()方法。

       

    parseInt()

    可以解析字符串的某个部分,能识别更多的整数格式(如八进制)

    var num1 = parseInt("1234blue"); // 1234

    var num2 = parseInt(""); // NaN

    var num3 = parseInt("0xA"); // 10(十六进制数)

    var num4 = parseInt(22.5); // 22

    var num5 = parseInt("070"); // 56(八进制数)

    var num6 = parseInt("70"); // 70(十进制数)

    var num7 = parseInt("0xf"); // 15(十六进制数)

       

    然而,ECMAScript 3 JavaScript引擎将"070"当作八进制,ECMAScript 3 JavaScript5引擎将其当作十进制。

    故应制定该函数的第二个参数:

    var num1 = parseInt("AF", 16); //175

    var num2 = parseInt("AF"); //NaN

       

    parseFloat()

    从第一个字符开始,到字符串结尾或遇到一个无效的浮点数字符

    函数只能解析十进制,故十六进制字符串返回0

    var num1 = parseFloat("1234blue"); //1234 (整数)

    var num2 = parseFloat("0xA"); //0

    var num3 = parseFloat("22.5"); //22.5

    var num4 = parseFloat("22.34.5"); //22.34

    var num5 = parseFloat("0908.5"); //908.5

    var num6 = parseFloat("3.125e7"); //31250000

       

       

    String

    1.字符字面量

    转义序列

       

    2.字符串特点

    一旦创建,不能改变

    var str = "java";

    str = str + "Script";

    上述过程其实创建了一个新字符

       

    3.转为字符串

    toString()

    除了null和undefined外,其余值都有该方法。

       

    数值调用该方法可以传递一个参数,表示转为多少进制的字符串。

    var num = 10;

    alert(num.toString()); // "10"

    alert(num.toString(2)); // "1010"

    alert(num.toString(8)); // "12"

    alert(num.toString(10)); // "10"

    alert(num.toString(16)); // "a"

       

       

    String()

    在未知所转换值是否是null或undefined时,使用该方法。

       

    如果变量是null或undefined时,返回"null"或"undefined"

       

    var value1 = 10;

    var value2 = true;

    var value3 = null;

    var value4;

    alert(String(value1)); // "10"

    alert(String(value2)); // "true"

    alert(String(value3)); // "null"

    alert(String(value4)); // "undefined"

     

    Object

    Object类型是所有它的实例的基础。

    Object的每个实例都有下列的属性和方法:

       

    constructor:保存着用于创建当前对象的函数。对于前面的例子而 言,构造函数(constructor)就是Object()

    hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例

    如:o.hasOwnProperty("name"))。

    isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第5章将讨论原型)。

    propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句(本章后面将会讨论)来枚举。

    toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

    toString():返回对象的字符串表示。

    valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。

       

       

       

       

    操作符

    位操作符:

    有符号整数,第32位保存符号,负数以二进制补码表示。

       

    1.按位非

    var num1 = 25; //二进制00000000000000000000000000011011

    var num2 = ~num1; //二进制11111111111111111111111111100110

    // num2 = -26

       

    2.按位与

    var result = 25 & 3;

    alert(result); //1

       

    25 = 0000 0000 0000 0000 0000 0000 0001 1001

    3 = 0000 0000 0000 0000 0000 0000 0000 0011

    ---------------------------------------------

    AND = 0000 0000 0000 0000 0000 0000 0000 0001

       

    3.按位或

    var result = 25 | 3;

    alert(result); //27

       

    4.按位异或

    var result = 25 ^ 3;

    alert(result); //26

       

    5.左移

    var oldValue = 2; // 等于二进制的10

    var newValue = oldValue << 5; // 等于二进制的1000000,十进制的64

       

    6.有符号右移

    有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记)。

       

    7.无符号右移

    无符号右移操作符由3个大于号(>>>)表示,这个操作符会将数值的所有32位都向右移动。对正数来说,无符号右移的结果与有符号右移相同。

       

    布尔操作符:

    1.逻辑非!

    逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

       

    2.逻辑与&&

    同上,它是短路操作符

       

    3.逻辑或||

    1

       

    乘性操作符:

    如果操作数不是数值类型,后台将会调用Number()方法。

       

    加性操作符:

    1.加法

    字符串+数值:数值转为字符串

    字符串+字符串:直接拼接

       

    如果是数值infinity+字符串="infinity字符串"

    2.减法

    如果有一个操作数是字符串,则调用Number()方法。

       

    关系运算符:

    1.两个数值,直接比较值得大小

    2.两个字符串,比较字符编码值

    3.一个数值和一个字符串,先将字符串转为数值(若不能转换,返回false)

    4.两个对象,调用对象的valueOf方法获取值,如果没有该方法则调用toString()。

    5.一个是布尔,则将其转为数值

       

    相等操作符:

    1.相等和不相等

    一个是布尔,将其转换为数值

    一个是字符串,另一个是数值,将字符串转为数值

    一个是对象,另一个不是,对象调用valueOf方法

    两个都是对象,判断是否是同一个对象

    null和undefined是相等的

    两个都是NaN,相等返回false

       

    2.全等和不全等

    在两个操作数不转换下依然相当的情况下,返回true

       

    var result1 = ("55" != 55); //false,因为转换后相等

    var result2 = ("55" !== 55); //true,因为不同的数据类型不相等

       

    条件操作符:

    variable = boolean_expression ? true_value : false_value;

       

    赋值操作符:

    简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量

       

    逗号操作符:

    使用逗号操作符可以在一条语句中执行多个操作,如下面的例子所示:

    var num1=1, num2=2, num3=3;

    语句

    if语句

       

    do-while语句

       

    while语句

       

    for语句

       

    for-in语句

    for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是for-in语句的语法:

    for (property in expression) statement

    下面是一个示例:

    for (var propName in window) {

    document.write(propName);

    }

       

    break语句

       

    continue语句

       

    with语句

    with语句的作用是将代码的作用域设置到一个特定的对象中。

       

    定义with语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示:

    var qs = location.search.substring(1);

    var hostName = location.hostname;

    var url = location.href;

    上面几行代码都包含location对象。如果使用with语句,可以把上面的代码改写成如下所示:

    with(location){

    var qs = search.substring(1);

    var hostName = hostname;

    var url = href;

    }

       

    switch语句

    switch语句在比较值时使用的是全等操作符,因此不会发生类型转换。

    (例如,字符串"10"不等于数值10

    switch (expression) {

    case value: statement

    break;

    case value: statement

    break;

    case value: statement

    break;

    case value: statement

    break;

    default: statement

    }

       

       

       

    函数

    理解参数:

    即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数

       

    其实,arguments对象只是与数组类似(它并不是Array的实例),因为可以使用方括号语法访

    问它的每一个元素(即第一个元素是arguments[0],第二个元素是argumetns[1],以此类推),使

    length 属性(函数的length属性)来确定传递进来多少个参数。

       

    注意:函数传入的参数值与arguments对应值保持同步,即更改arguments对应值,参数值也会变,如下:

    function print(a1,a2){

    arguments[0]=12

    console.log(a1); //打印出12,而不是33

    }

    print(33,2);

       

       

    没有重载

    函数没有重载功能。但可以通过判断参数数目实现类似于重载的功能。

      

  • 相关阅读:
    获得数据控件事件索引并获取其中值总结
    关于dropdwonlist无法获得值问题
    通过反射,将datatable转换为List集合(反射读取实体类的属性,并赋值),通过接口来实现MySql和MsSql数据的切换(二层反射),静态构造函数,抽象类和接口的区别
    Reflection反射,Assembly程序集,Type类型类,AssemblyQualifiedName程序集的限定名,DataTable和IList接口互相转化
    memcache实战之三 :客户端 enyim.com Memcached Client 的安装与调试以及实例,2012年下载地址
    memcache实战之一 :服务器端软件 memcached1.2.6win32bin 的 详细安装和调试
    一些.net开发需要额外熟悉的东西
    memcache实战之二 :客户端 Memcached Providers 1.2 for .net 2.0 的安装与调试以及实例,curr_items 和 total_items的区别
    MySQL ('root'@'%') does not exist的问题
    asp.net 结合 memcache 进行分布式缓存的开发,结合mysql数据库
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5519262.html
Copyright © 2020-2023  润新知