5、数据类型

前言:
5种原始型基本数据类型,也叫值类型:Undefined、Null、Boolean、Number和String。
复合型/引用型数据类型:Object,对象是属性和方法的集合,其本质是一组无序的名值对组成的。还有些如Array()、function()类型,
【记一下】
值类型:数值、布尔值、null、undefined。 引用类型:对象、数组、函数。
【区别】
基本的数据类型有:`undefined,boolean,number,string,null.基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值。
引用数据类型:引用类型的存储需要内存的栈区和堆区共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

基本数据类型内存存储方式

var name = ‘jozo‘;
var city = ‘guangzhou‘;
var age = 22;

引用数据类型存储方式

var person1 = {name:‘jozo‘};
var person2 = {name:‘xiaom‘};
var person3 = {name:‘xiaoq‘};

包装类
为了便于操作基本类型值,ECMAScript 为3个常用的基本数据类型boolean,number,string提供了包装类,每个类对用的都有自己的构造方法。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些(构造方法提供)方法来操作这些数据。
number类型包装类是Number
string类型包装类是String
boolean类型包装类是Boolean

var str1="hello!";
var s=str1.substring(2);
alert(s);
/*第一行,我按照平常的习惯,为str1赋予了一个字符串值。
 第二行,我却拿基本类型的变量来访问一个方法。
【解释】访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值,而在读取模式中访问字符串时,后台会:
1、创建string类型的一个实例:var str1=new string(‘hello!‘);
2、在实例上调用指定的方法:var s=str1.substring(2);
3、销毁这个实例:str1=null;
 记住销毁的只是实例,而不是之前的基本类型值。所以每次调用方法时,都会这样一番。*/

字面量Vs创建new对象赋值
直接量也称为字面量,是Js中一种对象的表示(或者说创建)方式,它可以通过直接给变量赋上Js中原生对象值的方式从而转换为一个相应的对象。
而通过new来创建对象,再赋值。则是中规中矩的方式,但是用于频繁使用的基本数据类型来说,就过于麻烦了
从这个定义中可以看出,这种定义方式实际上是声明一种类型的变量,并同时进行了赋值。因此,声明后的对象直接量可以在代码中直接使用,而不必使用new关键字来创建对象。

var str1="hello!";
var str2=new String(‘hell‘);
console.log(typeof str1);//string
console.log(typeof str2);//object
/*String 是构造函数,string是变量的一个类型。以上两种使用起来是一样的
还有要注意的是,使用new调用基本包装类型的构造函数,new创建的全是对象,所以typeof全是object。so与直接赋值是不一样的就是数据类型不一样*/

string
格式
字符串类型是最熟悉不过的啦,至于用单引号,还是双引号,在js中还是没有差别的。

var firstName=‘zakas‘;

 String包装类的对象方法

length计算字符串的长度
str.length

indexOf()索引 定位字符串中某一指定的字符首次出现的位置
var str="Hello";
console.log(str.indexOf("e"));//e第一次出现的位置
[Web浏览器] "1"

match() 查找字符串中特定的字符,若找到的话,会返回次字符。
var str="Hello world!"
console.log(str.match("Hello"));
console.log(str.match("hello"));
[Web浏览器] "Hello"
[Web浏览器] "null"

replace() 方法在字符串中用某些字符替换另一些字符
var str="Hello world!"
var NewStr=str.replace(/world/,"girl")
console.log(NewStr);
[Web浏览器] "Hello girl!"

更多的方法请参考手册
http://www.w3school.com.cn/jsref/jsref_obj_string.asp

number
该类型的表示方法有两种形式,第一种是整数,第二种为浮点数。
[正数]整数 可以通过十进制,八进制,十六进制的字面值来表示。
[浮点数]即小数,如果小数点后只有零,则该小数会被转化为整数。浮点数所占据的内存空间是整数的两倍。

var num=123;
var num=1.23;

Number对象方法

/*toString把数字转换为字符串*/
 var num=123;
 var NewNum=num.toString();
 console.log(typeof num);// "number"
 console.log(typeof NewNum);//"string"
/*其它方法请参考手册 http://www.w3school.com.cn/jsref/jsref_obj_number.asp*/

boolean
即布尔类型,该类型有两个值:true false;

var x=true;

Boolean对象方法
创建对象:

var x=new Boolean();
/*若不写参数,或为 0、-0、null、""、false、undefined 或 NaN,则该对象设置为 false。否则设置为 true(即使 value 参数是字符串 "false")。*/

方法

//toString将布尔值转换成字符串
var test= true;
console.log(test+"类型为:"+typeof test)//"true类型为:boolean"
console.log(test.toString()+"类型为:"+typeof test.toString())//"true类型为:string"

undefeined
有两种情况会undefined,
在使用var声明变量,但未对其加以初始化时,这个变量的类型就是undefined,且其默认初始化值为undefined。
对未声明与初始化的变量,直接使用,那么这个变量的类型也是undefined,但是没有默认初始化值。

var message;
console.log(‘已声明,但未初始化的变量message的类型是:‘ +typeof message)
console.log(‘未声明,也未初始化的变量age的类型是:‘+ typeof age)
/*[Web浏览器] "已声明,但未初始化的变量message的类型是:undefined"
[Web浏览器] "未声明,也未初始化的变量age的类型是:undefined"*/

两种情况的区别
因为js的变量都是用关键字var来声明的,变量的具体类型取决于他被赋予的变量值,而对于以上两种情况,虽然本质上有区别,但是都没有被初始化,所以其类型都是undefined。但是后者没有初始化值。所以当

var message;
console.log(message)
console.log(age)
/*[Web浏览器] "undefined"
[Web浏览器] "Uncaught ReferenceError: age is not defined"*/

null
js的5中原始数据类型里边的, 另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。(比如:Number的字面量就可以是1-9之间任意数字)
null用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。
null就是啥都没有,譬如,而空格、空字符串、0等都是有实际值的对象,与null当然有质的区别了。

console.log(typeof null) //打印object
/*  从逻辑角度来看,null值表示一个空对象指针.
    而这正是使用typeof操作符检测null值时会返回“object”的原因。
    《JavaScript高级程序设计(第2版)》P22如是说
    在ECMA6中, 曾经有提案为历史平反, 将type null的值纠正为null, 但最后提案被拒了. 理由是历史遗留代码太多, 不想得罪人, 不如继续将错就错当和事老
*/

NaN【不属于5种基本数据类型,不常用】
概念
是非数字类型,即Not a Number 的简写。隶属number类型的值。
注意它可不是js的5中原始数据类型里边的。
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。

console.log(typeof NaN)//会打印number

什么情况下会返回NaN?
参考:http://www.w3school.com.cn/jsref/jsref_nan_number.asp
执行该代码,本应该返回数字的,结果却没有,那么就会返回NaN,比如下边

//运算函数,无法做算术运算时,或结果不是数字,就返回NaN
console.log(0/0);
console.log(Math.round())//四舍五入失败时,会返回NaN
console.log(Math.sqrt("Q"))//求平方根失败时,会返回NaN
//不能强制转换时,或结果不是数字,就返回NaN
console.log(Number("Q"))//强转数字失败时,会返回NaN
//在不能解析指定的字符串时,或结果不是数字,就返回NaN
console.log(parseInt("Q")) //解析字符串,并返回一整数失败时,会返回NaN
console.log(parseFloat("k")) //解析字符串,并返回一浮点数失败时,会返回NaN

对于一些常规情况下返回有效数字的函数,也可以采用这种方法,用 Number.NaN 说明它的错误情况,此属性只有一个值:NaN。

//判断月份是否为常规有效数字
var Month=30;
if (Month < 1 || Month > 12){
Month = Number.NaN;//Number.NaN值为NaN
}
console.log(Month) //打印NaN

Number对象的属性NaN--**Pk**--全局对象的属性 NaN
参考:http://www.w3school.com.cn/jsref/jsref_nan.asp

在 ECMAScript v1 和其后的版本中,还可以用预定义的全局属性 NaN 代替 Number.NaN。
全局对象的该属性即NaN不怎么常用,其实Number对象的属性NaN也不常用!

总结:
1. 全局对象和Number对象,都有一个属性NaN,此属性只有一个值NaN。但此属性很少有人用
2. 人们用的最多的是,全局函数isNaN(),用来判断某个值是不是非数字。

/*isNaN(x)判断是不是非数,x为空或者非数的时候满足条件。比如isNaN(5/0)就成立。
总之大致一句话总结:只要不是数字,都是trtue
通常用于检测值的结果,判断它们表示的是否是合法的数字。*/
console.log(isNaN(1))//false
console.log(isNaN(2-1))//false
console.log(isNaN(5/0))//false
console.log(isNaN("5"))// false【注】

console.log(isNaN(0/0))//0除以0结果为NaN,true
console.log(isNaN("5-2"))//true
console.log(isNaN("A"))//true
//【注】:为何此处也行,因为因为 "5"==5, js会自动转换!!!所以必须判断类型,就诞生了typeof函数。如下代码
console.log("5"-"3")//结果打印2
console.log("5-3")//结果打印5-3

最后一个:
复合数据类型(引用数据类型)
Object
1、该类型实例化的对象,是一组数据或函数的集合或都有
2、实例化对象(即创建对象)有两种办法,一种是通过new操作符,一种是通过对象字面量表示法。【js没有class的概念,但是创建对象也得有类的意识,在ES6里已经引入了class关键字类】

//一种是通过对象字面量表示法
var dsh={
   "name":"丁少华",//属性写法1
    age:"30",//属性写法2
    speak:function (){alert("大家好,我叫"+dsh.name+",我"+dsh.age)}
}
dsh.speak()

//一种是通过new操作符
function Persion(name,age){
    this.name=name;
    this.age=age;
    this.speak=function(){alert("大家好,我叫"+name+",我"+age)};
}
wx=new Persion("王新",20);//实例化对象
wx.speak()

3、object类型是最基本的复合数据类型,我们可以在其基础上继承出更多的类型。
像我们知道的Array()、Date()、还有有意思的function()类型,都是从object继承的。而且这些类型都在程序员使用前被默认设置了属性和方法,供程序员调用。

4、而以上类型又有一个笼统的称呼为引用类型。为什么是引用类型呢?
就用java的思想去理解吧---好吧,本文的一开始就介绍了,你在向上滑动看看。

typeof

ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String
typeof是用来测试数据类型的,会返回上边的5种原始类型和function

本文参考:

http://www.jianshu.com/p/0d3034102220

https://segmentfault.com/a/1190000002789651

http://www.jb51.net/article/63875.htm

时间: 2024-11-08 07:58:08

5、数据类型的相关文章

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

JavaScript数据类型检测

一.JavaScript 数据类型 1.基本数据类型(6种) Undefined Null Boolean Number String Symbol (ES6新增) 2.引用数据类型: Object 二.数据类型检测 1. typeof 可以检测除null 外的基本类型.null 和所有对象的typeof都是"object", 不能用于检测用户自定义类型. 比如Date, RegExp, Array, DOM Element的类型都是"object". var s

【个人笔记】《知了堂》MySQL中的数据类型

MySQL中的数据类型 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) 3个字节  范围(-8388608~8388607) int(m) 4个字节  范围(-2147483648~2147483647) bigint(m) 8个字节  范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint un

英文词频统计预备 组合数据类型练习

1.实例: 下载一首英文的歌词或文章,将所有,.?!等替换为空格,将所有大写转换为小写,统计某几个单词出现的次数,分隔出一个一个的单词. big='''OoohOooh Put your make-up onGet your nails doneCurl your hairRun the extra mileKeep it slim so they like you, do they like you? Get your sexy onDon't be shy, girlTake it offT

Java基础——数据类型

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 一.数据类型(八种): 1.计算机的存储进位:位是最小的存储数据单位,以此类推,如图: 2.在java里我们可以使用 0b或者0x表示二进制和十六进 如:0xABC或0b01010001: 3.在java里面数据存储中高位是1 就是负数,高位是0 就是正数: 4.Java数据类型详解: 整数数值:int short:小于32767 byte:小于127 小数

python数据类型详解

主要内容: 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 列表与元组 定义列表 1 list = ['a' , 'b', 'c', 'd'] 通过下标访问列表中的元素,下标从0开始计数 1 list[0] # 'a' 2 list[1] # 'b' 3 list[-1] # 'd' 4 list[-2] # 'c' 基本操作: 切片:取多个元素 1 list = ["A","B","C","D",&

MongoDB的数据类型(四)

JSON JSON是一种简单的数据表示方式,它易于理解.易于解析.易于记忆.但从另一方面来说,因为只有null.布尔.数字.字符串.数组和对象这几种数据类型,所以JSON有一定局限性.例如,JSON没有日期类型,JSON只有一种数字类型,无法区分浮点数和整数,更别说区分32为和64位数字了.再者,JSON无法表示其他一些通用类型,如正则表达式或函数. BSON BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式,简称Binary

myasql支持的数据类型以及函数转换

myasql支持的数据类型 1.数值类型 tinyint 1 小整数 smallint 2 大整数 mediumint 3 大整数 int 4 大整数 bigint 8 极大整数 如果插入 的较大较小 会自动改编为范围值 多余的数截取 float 4 double 8 decimal 默认是10 可以指定多少个整数和小数 2.字符串类型 char 0-255字节 定长字符串 varchar 0-255字节 变长字符串 tinyblob 0-255字节 不超过255个字符的二进制字符 tintex

C# 《三》变量、常量与数据类型(1)

变量操作 在计算机中存储数据和儿童在抽屉中存放物品很类似. 1.计算机存储变量的过程: 1)声明变量: 2)给变量赋值: 3)使用变量. 声量的声明.赋值 1.要在计算机中存一个数字 50,需要两句话. int a; //将要放的物品告诉家长(声明变量) a = 50; //将物品放到某个抽屉中 (赋值) 2.声明变量的语法格式: 1)数据类型   变量名: 3.赋值:  变量名  = 值: 4.可以  a = 3.14 :吗??? 5.数据有整数(int).小数(double).字符串(str

Python 03-pyc、数据类型

pyc是什么? 在Python3中才有的. Java是先编译再解释.Python也是基于虚拟机的语言. 执行Python时,会先编译,编译的结果保存在位于内存中的PyCodeObject中,运行时解释器将PyCodeObject写回到pyc文件,它是预编译后的二进制的字节码文件. 第二次运行时,会先找pyc文件.所以pyc文件其实是PyCodeObject的一种持久化保存方式. 第二次运行时,会先检查下时间,看下有没有过修改,如果有修改会再编译一次. 数据类型 type()查看数据类型 1.in