zoukankan      html  css  js  c++  java
  • JS类型(1)_JS学习笔记(2016.10.02)

    js类型

    js中的数据类型有undefined,boolean,number,string,null,object等6种,前5种为原始类型(基本类型),基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值。第6种为引用类型。

    基本类型

    基本类型有以下几个特点:

    ·基本类型的值是不可变的。任何方法都无法改变一个基本类型的值,比如一个字符串:

    var name = 'jozo';

    name.toUpperCase();    // 输出 'JOZO'

    console.log(name);       // 输出  'jozo'

    原始的name并未发生改变,而是调用了toUpperCase()方法后返回的是一个新的字符串。

    ·基本类型的比较是值的比较。只有在它们的值相等的时候它们才相等。但可能会这样:

    var a = 'jozo';

    var b = 'jozo';

    console.log(a === b);        //true

    在用==比较两个不同类型的变量时会进行一些类型转换。像上面的比较先会把true转换为数字1再和数字1进行比较,结果就是true了。

    这是当比较的两个值的类型不同的时候==运算符会进行类型转换,但是当两个值的类型相同的时候,即使是==也相当于是===。

    ·基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

    var name = 'jozo';

    var city = 'guangzhou';

    var age = 22;

     

    栈区包括了变量的标识符和变量的值。

    引用类型

    javascript中除了上面的基本类型(number,string,boolean,null,undefined)之外就是引用类型了,

    也可以说是就是对象了。对象是属性和方法的集合。也就是说引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。

    引用类型有以下几个特点:

    ·引用类型的值是可变的。我们可为引用类型添加属性和方法,也可以删除其属性和方法,并且是可以动态改变的。

    ·引用类型的值是同时保存在栈内存和堆内存中的对象。操作对象,实际上是操作对象的引用,所以引用类型的值是按引用访问的。

    准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,

    栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。假如有以下几个对象:

    var person1 = {name:'jozo'};

    var person2 = {name:'xiaom'};

    var person3 = {name:'xiaoq'};

    ·引用类型的比较是引用的比较。

    var person1 = {};

    var person2 = {};

    console.log(person1 == person2);   // false

    引用类型时按引用访问的,换句话说就是比较两个对象的堆内存中的地址是否相同,那很明显,person1和person2在堆内存中地址是不同的,所以这两个是完全不同的对象,所以返回false。

    ·引用类型的赋值其实是对象保存在栈区地址指针的赋值。两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响:

    var a = {};   // a保存了一个空对象的实例

    var b = a;   // a和b都指向了这个空对象

    a.name = 'jozo';

    console.log(a.name);   // 'jozo'

    console.log(b.name);   // 'jozo'

    b.age = 22;

    console.log(b.age);    // 22

    console.log(a.age);    // 22

    console.log(a == b);   // true

    类型比较

    ·比较符 :==,!=,===,!==,>=,<=,>,<

    == 总是试图比较他们的值,如果是基本类型,比较他们的值;如果类型不一样,总是试图作转化。

    === 比较同一性,不作转化就比较

    ·比较对象的转换顺序:

    如果一个 object 和一个基本类型比较 , 则先调用对象的 valueOf, 再调用对象的 toString 与基本类型进行比较。也就是说先转成 number 型,再转成 string 类型。

    如果是与 boolean 比较 ,先把 true 转为 1,false 转为 0 再比较。

    如果两边都是数字 , 或者可以转化为数字 , 则比较数字。

    如果两边都是 string , 或者可以转化为 string , 则比较 string 。

    如果一边可转为 string, 一边可转为 number, 则再试图把 string 转为 number 再比较 ,如果 string 不能转为 number, 则为 NaN, 返回 false。

    如果有 object 参与比较 , 则总是试图转 object 为 number 或 string 再比较。

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/slly/p/5927548.html
Copyright © 2011-2022 走看看