JavaScript中的数据类型(三)

由于JavaScript是弱类型的编程语言,所以我们学习JavaScript的数据类型不是为了定义变量,因为在JS中声明变量不需要指定数据类型,但是我们在给变量赋值的时候,要知道那个具体值的数据类型。

一、概述

JS中的数据类型包括以下几种:

  • Undefined
    包括的具体指如下:undefined
  • String
    包括的具体指如下:’a’、”a”、’abc’、”abc”……
  • Number
    包括的具体指如下:1、16、3.3、NaN、Infinity……
  • Boolean
    包括的具体指如下:true、false
  • Object
    包括的具体指如下:new Object()、new Date()、new Employee()、null……

二、typeof运算符

  • JS中的typeof运算符非常重要,它可以在程序运行阶段动态判断变量的数据类型
  • typeof运算符的使用规则:typeof 变量名、typeof(变量名)
  • typeof运算符的运算结果是以下六种结果之一:”undefined”、”string”、”number”、”boolean”、”object”、”function”
<script type="text/javascript">
    var ename = "smith";
    alert("typeof(ename)="+typeof(ename));//typeof(ename)=string
    function sum(a,b){
        if(typeof(a)!="number"||typeof(a)!="number"){
            alert("参数必须是数字类型");
            return;
        }
        return a+b;
    }
    sum();
    sum("a","b");
    sum(1,2);
</script>

三、Undefined数据类型

JS中的变量若只有声明而没有显式的赋值,系统默认赋值undefined。
注意:undefined跟’undefined’、”undefined”是不一样的。

<script type="text/javascript">
    var ename;
    alert("ename="+ename);
    if(ename=='undefined'){
        alert("ename=='undefined'");//不执行该分支
    }
    ename = undefined;
    alert("ename="+ename);
</script>

四、String数据类型

  • JS中没有字符类型,只有字符串类型
  • JS中的字符串可以使用单引号包裹,也可以使用双引号
  • 字符串这种数据类型又被称为“字符串对象”,但字符串对象不属于Object类型
  • 字符串对象的常用属性:length
  • 字符串对象的常用方法:toUpperCase()、toLowerCase()、substr()、substring()、replace()
  • 利用prototype属性给String类型的数据动态扩展方法和属性
<script type="text/javascript">
    var ename = "abcde"
    alert("ename.length="+ename.length);//ename.length=5
    //利用prototype属性给String类型的数据动态扩展方法和属性
    String.prototype.trim = function(){
        //前空白的正则表达式:/^\s+/
        //后空白的正则表达式:/\s+$/
        //JS中正则表达式的格式:/.../
        return this.replace(/^\s+/,"").replace(/\s+$/,"");
    }
    ename = ename.trim();
    alert("ename="+ename);//ename=abcde

    ename = ename.toUpperCase();
    alert("ename.toUpperCase()="+ename);//ename.toUpperCase()=ABCDE

    ename = ename.toLowerCase();
    alert("ename.toLowerCase()="+ename);//ename.toLowerCase()=abcde

    //2是起始下标,3是长度
    value = ename.substr(2,3);
    alert("ename.substr(2,3)="+value);//ename.substr(2,3)=cde
    //2指的是起始下标,3指的是结束下标(3不包括在内),[2,3)
    value = ename.substring(2,3);
    alert("ename.substring(2,3)="+value);//ename.substring(2,3)=c

    //只替换第一项
    alert("1990-01-01".replace("-",","));//1990,01-01
    //全部替换需要使用正则表达式
    alert("1990-01-01".replace(/-/g,","));//1990,01,01
</script>

五、Number数据类型

  • JS中不管是整数还是小数,都属于Number数据类型
  • 当表达式中有数字参与,但表达式却无法正常计算的时候,计算结果就是NaN
  • Infinity表示无穷大,当表达式的运算结果为无穷大时,那结果就是Infinity
  • 重要函数:isNaN(数据),它用来判断数据是否是一个数字,不是数字返回true,是数字返回false
  • 常用函数:parseInt()、parseFloat()
<script type="text/javascript">
    var num = 10;
    alert("typeof(num)="+typeof(num));//typeof(num)=number
    var num = 10.2;
    alert("typeof(num)="+typeof(num));//typeof(num)=number
    num = NaN;
    alert("typeof(num)="+typeof(num));//typeof(num)=number
    num = Infinity;
    alert("typeof(num)="+typeof(num));//typeof(num)=number

    //什么时候执行结果是NaN?
    var a;
    var b=2;
    var c = a+b;
    alert("c="+c);//c=NaN

    //重要的函数:isNaN(数据),它用来判断数据是否是一个数字,不是数字返回true,是数字返回false
    alert(isNaN(c));//true
    alert(isNaN("abc"/2));//true
    alert(isNaN(10/2));//false

    //什么时候执行结果是Infinity?
    //Infinity表示无穷大,除数是0的时候,结果一定是Infinity
    var retValue = 10/0;
    alert(retValue);//Infinity

    //parseInt()函数
    var price = "100";
    price = parseInt(price);
    alert(price + 1);//结果:101
    price = "3.9";
    price = parseInt(price);
    alert(price + 1);//结果:4(不是四舍五入)

    //parseFloat()函数
    price = "3.95";
    price = parseFloat(price);
    alert(price);//3.95
</script>

六、Boolean数据类型

  • Boolean数据类型只有两个值:true、false
  • Boolean类型的数据主要用在逻辑运算或条件控制语句中
  • JS中=、==、===的区别
    =表示赋值;==只比较值;===既比较值也比较数据类型
<script type="text/javascript">
    var flag = true;
    alert("typeof(flag)="+typeof(flag));//typeof(flag)=boolean
    flag = false;
    alert("typeof(flag)="+typeof(flag));//typeof(flag)=boolean
    flag = 1;
    alert("typeof(flag)="+typeof(flag));//typeof(flag)=number

    //=赋值、==只比较值、===既比较值也比较数据类型
    var a = true;
    var b = true;
    alert(a==b);//true
    alert(a===b);//true
    a = true;
    b = 1;
    alert(a==b);//true
    alert(a===b);//false
</script>

七、Object数据类型

  • JS也是面向对象的编程语言,自定义的类默认继承的父类是Object
  • JS中声明函数就表示定义了一个类,函数名就是类名,函数本身又是构造函数,函数的声明和类的定义混合完成
  • 利用普通函数也可以创建对象,只不过这样的对象既没有属性也没有方法
<script type="text/javascript">
    var obj = new Object();
    alert("typeof(obj)="+typeof(obj));//typeof(obj)=object
    obj = null;
    alert("typeof(obj)="+typeof(obj));//typeof(obj)=object
    var ename = "SMITH";    
    function sayHello(){
        alert("Hello:"+ename);
        return "aaa";
    }
    var obj = new sayHello();
    var returnValue = sayHello();
    alert("obj="+obj);//obj=[object Object]
    alert("returnValue="+returnValue);//returnValue=aaa
</script>
  • 定义类的第一种方式,一般function关键字放在前边的写法用来定义函数
<script type="text/javascript">
    //【定义类的第一种方式】
    function User(id,name){
        //属性(必须加this.)
        this.id = id;
        this.name=name;
        //方法(必须加this.)
        this.shopping = function(){
            alert(this.name+" is shopping......");
        }
        //类中方法的错误写法1
        //working = function(){
        //  alert(this.name+" is working......");
        //}
        //类中方法的错误写法2
        //function working(){
        //  alert(this.name + " is working...");
        //}
    }   
    var user = new User();
    user.shopping();
    //user对象中的id属性、name属性默认值是undefined
    alert("user.id="+user.id);//user.id=undefined
    user = new User(16,"guoguo");
    user.shopping();
    alert("user.id="+user.id);//user.id=16
</script>
  • 定义类的第二种方式,一般函数名(类名)放在前边的写法用来定义类
<script type="text/javascript">
    //【定义类的第二种方式】
    Employee = function(id,name){
        //属性(必须加this.)
        this.id = id;
        this.name=name;
        //方法(必须加this.)
        this.working = function(){
            alert(this.name+" is working......");
        }
    }
    var employee = new Employee(6,"guoguo");
    employee.working();
    alert("id="+employee.id+",name="+employee.name);
    //Object中有prototype属性,所以子类Employee才能使用prototype
    //动态扩展Employee类中的方法
    Employee.prototype.signIn = function(){
        alert(this.name + " has sign in......");
    }
    //必须先定义扩展方法,然后才能调用扩展方法
    employee.signIn();
</script>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值