3/4:JavaScript中的数据类型

4、数据类型

4.1:typeof操作符

  • “undefined”——如果这个值未定义
  • “boolean”——如果这个值是布尔值
  • “string”——如果这个值是字符串
  • “number”——如果这个值是数值
  • “object”——如果这个值是对象或null
  • “function”——如果这个值是函数
var message="some string"

console.log(typeof message) //"string"

console.log(typeof(message)) //"string"

console.log(typeof 95) //"number"

//typeof操作符可以是变量,也可以是数值字面量
//typeof是一个操作符而不是函数

4.2:undefined类型:只有一个值,即特殊的undefined,在使用var声明变量但未对其加以初始化时,这个变量就是undefined

var message;

console.log(message==undefined) //true

//此案子只声明了变量,但未对其进行初始化 


var message=undefined;

console.log(message==undefined)  //true

结论:对未初始化和未声明的变量执行typeof操作符都返回了undefined值;

4.3、Null类型:Null类型是第二个只有一个值的数据类型,这个特殊的值是null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回object

var car = null;

console.log(typeof car); //object

4.4、Boolean类型:该类型只有两个字面值:true和false--》它们是区分大小写的True和False都不是boolean值,只是标识符;

数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数字值(包含无穷大)0和NaN
Object任何对象null
Undefinedn/a(not applicable)表示:不适用undefined

4.5、Number类型(数值类型)

//4.5.1:浮点数值(所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须有一位数字)
var floatNum1=1.1;
var floatNum2=0.1;
var floatNum3=.1;    //有效数值,但不推荐
var floatNum4=1.;    //小数点后面没有数字——解析为1
var floatNum5=10.0;  //整数——解析为10

//对于数字极大或极小的数值,可以用e表示法,用e表示法表示数值等于e前面的数值乘于10的指数次幂
//ECMAScript中e表示法,前面是一个数值(可以是整数也可以是浮点数),中间是一个大写或小谢的字母E,后面是10的幂中的指数,该幂值将用来与前面的数相乘。

var floatNum6=3.125e7; //等于3125000


//4.5.2:数值范围(由于内存的限制,ECMAScript并不能保存世界上所有的数值)
//如果某次计算返回了正或者负的Infinity值,那么该值将无法继续参与下一次的计算;
var result=Number.MAX_VALUE+Number.MAX_VALUE
console.log(isFinite(result));//false

//4.5.3:NaN:(即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况);
//特点一:任何涉及NaN的操作都会返回NaN;
//特点二:NaN与任何值值都不相等,包括NaN本身;
alert(NaN==NaN); //false
//定义了一个isNaN()函数,这个函数接受一个参数,该参数可以是任何类型;该函数在接收到一个值之后,会尝试将这个值转换为数值;

console.log(isNaN(NaN));  //true
console.log(isNaN(10));  //false(10是一个数值)
console.log(isNaN("10"));  //false(可以转换成数值10)
console.log(isNaN("blue")); //true(不能转换成数值)
console.log(isNaN(true));   //false(可以被转换成数值1)

4.5.4:数值转换 Number()函数的转换规则如下:

  1. 如果是Boolean值,true和false将分别被转换为1和0;
  2. 如果是数字值,只是简单的传入和返回;
  3. 如果是null值,返回0;
  4. 如果是undefined,返回NaN;
  5. 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转转的结果是NaN,则调用toString()方法,然后再次依照前面的规则转换返回的字符串值;
  6. 如果是字符串,遵循下列规则:
  • 如果字符串中包含数字(包括前面带正号或负号的情况下),则将其转换为十进制的数值,即“1”会变成1,“123”会变成123,而“011”会变成11;(忽略前导零)
  • 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值,(忽略前导零)
  • 如果字符串中包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值;
  • 如果字符串好似空的,则将其转换为0;
  • 如果字符串中包含除上述职位的字符;则将其转换为NaN;
var num1=Number('Hello world!'); //NaN

var num2=Number(''); //0

var num3=Number('000011'); //11

var num4=Number(true); //1

//由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数;

var num11=parseInt('1234blue');  //1234
var num12=parseInt('');  //NaN
var num13=parseInt('0xA');  //10(十六进制数)
var num14=parseInt('22.5');  //22
var num15=parseInt('070');  //56(八进制数)
var num16=parseInt('70');  //70(十进制数)
var num17=parseInt('0xf');  //15(十六进制数)

var num21=parseInt('10',2);  //2(按二进制解析)
var num22=parseInt('10',8);  //8(按八进制解析)
var num23=parseInt('10',10);  //10(按十进制解析)
var num24=parseInt('10',16);  //16(按十六进制解析)

//与函数parseInt()和,parseFloat()区别之一。parseFloat()也是从第一个字符开始解析每个字符,而且也是一直解析道字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
//parseInt()和 parseFloat()区别之二;在于它终都会忽略前导的零,parseFloat()可以识别所有的浮点数值的格式,包括十进制整数格式

var num31=parseFloat('1234blue'); //1234(整数)
var num31=parseFloat('0xA'); //0
var num31=parseFloat('22.5'); //22.5
var num31=parseFloat('22.34.5'); //122.35
var num31=parseFloat('0908.5'); //908.5
var num31=parseFloat('3.125e7'); //31250000

4.5.6、String类型(用于表示又零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号""或单引号''表示。与PHP中的双引号和单引号会影响对字符串的解释方式不同,ECMAScript中的这两种语法形式没有啥区别,两个表示的字符串完成相同;)

字符字面量(String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或具有其他用途的字符)
字面量含义
\n换行
\t制表
\b退格
\r回车
\f进纸
\\斜杆
\'单引号('),在用单引号表示的字符串中使用;例如:' 哈哈哈,\'测试。\' '
\"双引号(“”),在用双引号表示的字符串中使用:例如:" 哈哈哈,\"测试。\" "
\xnn以十六进制代码nn表示的一个字符(其中n为0~F),例如:\x41 表示"A"
\unnnn以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F),例如:\u03a3表示希腊字母符∑
var text = "This is the letter sigma: \u03a3.";
console.log(text.length) //28
console.log(text) //This is the letter sigma: Σ. 
//此例子中的变脸text有28个字符,其中6个字符长的转义序列表示1个字符

字符串的特点:ECMAScript中的字符串是不可变的,字符串一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量;

var lang = "Java";
lang = lang + "Script";
console.log(lang)  //JavaScript

转换为字符串:要把一个值转换为一个字符串有两方式,

  1. 使用toString()方法,这个方法唯一要做的就是返回相对应值的字符串表示;
  2. 使用String()方法,这个函数能够将任何类型的值转换为字符串(String函数遵循下列转换规则)
  • 如果有toString()方法,则调用该方法(没有参数)并返回相应的结果;
  • 如果值是null,则返回"null";
  • 如果值是undefined,则返回"undefined";
    /************* toStrinng()方法 ****************************/
        var age=11;
        var ageAsString=age.toString();
        alert(ageAsString)  //字符串‘11’
        var found=true;
        var foundAsString=found.toString();
        alert(foundAsString) //字符串‘true’
    
        //数值、布尔值、对象和字符串值都有toString()方法。但是null和undefined值没有这个方法;
        //多数情况下,调用toString()方法不必传递参数,
        /*调用数值的toString()方法时,可以传递一个参数:输出数值的基数;默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示字符串值。*/
        var num=10;
        console.log(num.toString());  //10
        console.log(num.toString(2)); //1010
        console.log(num.toString(8)); //12
        console.log(num.toString(10)); //10
        console.log(num.toString(16)); //a
    
    /************* Strinng()函数 ****************************/
        var value=10;
        var value2=true;
        var value3=null;
        var value4;
        console.log(String(value));  //‘10’
        console.log(String(value2)); //‘ture’
        console.log(String(value3)); //‘null’
        console.log(String(value4)); //‘undefined’

     

 4.5.7:Object类型(ECMAScript中的对象就是一组数据和功能的集合);对象可以通过执行new操作符后跟要创建的对象类型的名称来创建,而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象;

var o = new Object();
//在ECMAScript中,如果不给构造函数传递函数,则可以省略后面的那一对括号
var o = new Object; //有效,但不推荐使用

重要思想:Object类型是所有它的实例的基础;换句话说:Object类型所具有的任何属性和方法也同样存在于更具体的对象中;Object的每个实例都具有下列属性和方法;

  • constructor:保存着用于创建当前对象的函数,对于前面例子而言,构造函数(constructor)就是Object();
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在,其中,作为参数的属性名(peopertyName)必须以字符串形式制定,例如:o.hasOwnProperty("name");
  • isPrototypeOf(object);用于检查传入的对象是否是当前对象的原型;
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,与hasOwnProperry()方法一样,作为参数的属性名必须以字符串形式指定。
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
  • toString():返回对象的字符串表示。
  • valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值