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

JS类型(1)_JS学习笔记(2016.10.02)的更多相关文章

  1. php学习笔记2016.1

    基本类型    PHP是一种弱类型语言.      PHP类型检查函数   is_bool()    is_integer()  is_double()  is_string()   is_objec ...

  2. SpringBoot学习笔记(10):使用MongoDB来访问数据

    SpringBoot学习笔记(10):使用MongoDB来访问数据 快速开始 本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于 ...

  3. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  4. javaSE学习笔记(10)---List、Set

    javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...

  5. 【python学习笔记】10.充电时刻

    [python学习笔记]10.充电时刻 任何python都可以作为模块倒入 *.pyc:平台无关的经过编译的的python文件, 模块在第一次导入到程序中时被执行,包括定义类,函数,变量,执行语句 可 ...

  6. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)

    Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...

  8. Ionic2学习笔记(10):扫描二维码

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5575843.html 时间:6/11/2016     说明: 在本文发表的时候(2016-06-1 ...

  9. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

随机推荐

  1. HDU 5623KK's Number DP

    题意:bc round 71 div 1 1003(有中文题面) 分析: 显然,每个人的策略就是都会拿剩下的数中最大的某几个数 假如我们用dp[i]表示当剩下i个数的时候先手得分-后手得分的最优值 那 ...

  2. Datatable转成Json方式两则

    1, Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据 1.这里下载:http://www.newtonsoft.com/products/json/ ...

  3. 树莓PI上跑爬虫

    主要是进行主机上使用myeclipse开发后,在从机上跑最后的程序 在主机上和树莓上都安装好java环境,maven,ant 拷到RPI上的时候修改

  4. 用js将毫秒时间转成正常时间

    1. 将毫秒时间转成正常时间 //#region 将毫秒转换成正常的日期 function getDate(time) { var date = new Date(parseInt(time)); v ...

  5. 【译】 AWK教程指南 附录C-AWK的内建函数

    C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...

  6. C/C++:拷贝构造函数

    拷贝构造函数是一种特殊的构造函数,因为它也是用来构造对象的.它具有构造函数的所有特性.拷贝构造函数的作用是用一个已经存在的对象去初始化另一个对象,这两个对象的类类型应该是一样的.定义拷贝构造函数的形式 ...

  7. Android字符串相关类 - CharSequence

    Class Overview CharSequence定义为public interface.该接口用于表示一个有序字符的集合,并在其中定义里了处理字符的方法. 已知的常用间接子类有String, S ...

  8. 中断——中断描述符表的定义和初始化(二) (基于3.16-rc4)

    上篇博文对中断描述符表(IDT)中异常和非屏蔽中断部分的初始化做了说明,这篇文章将分析外部中断部分的初始化. 在上篇博文中,可以看到,内核在setup_once汇编片段中,对中断和异常部分做了初步的初 ...

  9. php支持rewrite 时创建.htaccess文件

    1.win+r 快捷键 运行中输入cmd 2.进入dos界面:输入copy con .htaccess   3.回车后可以输入内容,再次回车即可产生文件

  10. 【bzoj1300】大数计算器

    题意: 求C(n,m) 如果C(n,m)的位数<=12 那么直接输出 否则按XXX...XXXXXXXXX的形式输出 题解: 这题之前打过 但是昨天又想出一种新的做法 先说下新的做法吧- - _ ...