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 再比较。

  • 相关阅读:
    使用ajax和history.pushState无刷新改变页面URL
    转:js-sdk探索之微信网页分享
    DOM操作优化
    转:jQuery插件开发精品教程,让你的jQuery提升一个台阶
    转:关于垂直网格与CSS基线对其的探讨
    伪元素控制网页表单样式
    div模拟textarea
    给独立程序员の建议
    ReactiveCocoa / RxSwift 笔记一
    ReactiveCocoa 浅析
  • 原文地址:https://www.cnblogs.com/slly/p/5927548.html
Copyright © 2011-2022 走看看