JavaScript的数据类型

1.数据类型分类

  • JS中数据类型:原始类型、引用类型
    原始类型:Undefined、Number、String、Boolean、Null, // Null类型只有一个值,null
    引用类型:Object以及Object的子类

  • ES规范(ECMAScript规范),在ES6(ES6全称是ECMAScript 6,是正式发布的JavaScript语言的一种标准,该标准的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。)之后,又基于以上的6种类型之外添加了一种新的类型:Symbol

2.JS中的typeof运算符

JS中一个运算符叫做typeof,这个运算符可以在程序的运行阶段动态的获取变量的数据类型
typeof运算符的语法格式:
typeof 变量名

typeof运算符的运算结果是以下6个字符串之一:注意字符串都是全部小写
“undefined”
“number”
“string”
“boolean”
“object”
“function”

<body>
<script type="text/javascript">

    // 求和,要求a变量和b变量将来的数据类型必须是数字,不能是其他类型
    // 因为以下定义的这个sum函数是为了完成两个数字的求和.
    function sum(a,b){
        if(typeof(a) == "number" && typeof(b) == "number"){
            alert("a + b =" + (a + b));
        }else{
            alert("a和b都必须为数字");
        }
    }

    sum("abc",1);//a和b都必须为数字
    sum(1,2);//a + b = 3

    alert(typeof sum);//function

    var a = 1;
    alert(typeof a);//number

    var b;
    alert(typeof b);//undefined

    var c = "abc";
    alert(typeof c);//string

    var d = false;
    alert(typeof d);//boolean

    var e = new Object();
    alert(typeof e);//object

    var f = null;
    alert(typeof f);//object,null属于Null类型,但是typeof运算符的结果是"object"


</script>

</body>

在JS当中比较字符串是否相等使用“==”完成。没equals
===表示不仅值要相等,数据类型也要相同

3.ES6版本之前的数据类型有6种

JS中数据类型:原始类型、引用类型。
原始类型:Undefined、Number、String、Boolean、Null
引用类型:Object以及Object的子类

1、Undefined

Undefined类型只一个值,这个值就是 undefined
当一个变量没有手动赋值,系统默认赋值undefined
或者也可以给一个变量手动赋值undefined。

<script type="text/javascript">
    var i;//undefined
    var k = undefined;//undefined

    alert(i == k);//true

    var y = "undefined";//"undefined"
    alert(y == k);//false
</script>

2、Number

  • 1、Number类型包括哪些值?
    -1 0 1 2 2.3 3.14 100 … NaN Infinity
    整数、小数、正数、负数、不是数字、无穷大都属于Number类型。
  • 2、isNaN() 结果是true表示不是一个数字,结果是false表示是一个数字。
  • 3、parseInt() 函数:可以将字符串自动转换成数字,并且取整数位.
alert(parseInt("2.333"));//2
  • 4、parseFloat()函数:可以将字符串自动转换成数字.
alert(parseFloat("2.333"));//2.333
  • 5、Math.ceil() 函数: 函数返回大于或等于一个给定数字的最小整数(Math是数学类,数学类当中一个函数叫做ceil(),作用是向上取整。
alert(Math.ceil("2.333"));//3
  • 6、整数、小数、正数、负数、不是数字、无穷大都属于Number类型。
var v1 = 1;
var v2 = 1.0;
var v3 = -2.3;
var v4 = NaN;
var v5 = Infinity;

//结果都为number
alert(typeof v1);
alert(typeof v2);
alert(typeof v3);
alert(typeof v4);
alert(typeof v5);

// 关于NaN (表示Not a Number,不是一个数字,但属于Number类型)
什么情况下结果是一个NaN呢?
// 运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN.

var a = 100;
var b = "abc";
alert(a/b);//NaN

// Infinity ( 当除数为0的时候,结果为无穷大)
alert( 10 / 0);//Infinity

思考:在JS中10 / 3 = ?
alert(10 / 3);//3.3333333333333335

isNaN() : 结果是true表示不是一个数字,结果是false表示是一个数字。
// 关于isNaN函数?
// 用法: isNaN(数据) ,结果是true表示不是一个数字, 结果是false表示是一个数字.

// isNaN : is Not a Number
function sum(num1,num2) {
    if(isNaN(num1) || isNaN(num2)){
        return "参与运算的必须全部是数字!!!";
    }
    return num1 + num2;
}

alert(sum(100,"abc"));//参与运算的必须全部是数字!!!
alert(sum(1,2));//3

3、Boolean类型

  • 1、 JS中的布尔类型永远都只两个值:true和false (这一点和java相同。
  • 2、在Boolean类型中一个函数叫做:Boolean()。
    语法格式:
    Boolean(数据)
    Boolean()函数的作用是将非布尔类型转换成布尔类型
<body>
<script type="text/javascript">
    var username = "";
    //会自动将非布尔类型转换为布尔类型,BOOlean也可省略,直接写为if(username){}
    if(Boolean(username)){
        alert("欢迎你" + username);
    }else{
        alert("用户名不能为空!!!")
    }

    //规律:“"就转换成true,"没"就转换成false.
    // 0 、null、 undefined、””(空串) 都认为是 false;
    alert(Boolean(0));//false
    alert(Boolean(1));//true
    alert(Boolean(""));//false
    alert(Boolean("abc"));//true
    alert(Boolean(null));//false
    alert(Boolean(NaN));//false
    alert(Boolean(undefined));//false
    alert(Boolean(Infinity));//true

4、String类型

  • 1、在JS当中字符串可以使用单引号,也可以使用双引号。
var s1 = 'abcdef';
var s2 = "test";
  • 2、在JS当中,怎么创建字符串对象呢?
    两种方式:
    第一种:var s = “abc”;
    第二种(使用JS内置的支持类String: var s2 = new String(“abc”);

需要注意的是:String是一个内置的类,可以直接用,String的父类是Object

// 小string(属于原始类型String)
var x = "king";
alert(typeof x);//string

// 大String(属于Object类型)
var y = new String("abc");
alert(typeof  y);//object
  • 3、无论小string还是大String,他们的属性和函数都是通用的。
  • 4、关于String类型的常用属性和函数?

常用属性:
length 获取字符串长度

常用函数:

  • indexOf: 获取指定字符串在当前字符串中第一次出现处的加粗样式索引
  • lastIndexOf 获取指定字符串在当前字符串中最后一次出现处的索引
  • replace 替换
  • substr 截取子字符串,substr(startIndex, length)
  • substring 截取子字符串,substring(startIndex, endIndex) 注意:不包含endIndex
  • toLowerCase 转换小写
  • toUpperCase 转换大写
  • split 拆分字符串

// 获取字符串的长度

alert(x.length);//4
alert(y.length);//3

// 判断一个字符串中是否包含某个子字符串?

alert("http://www.baidu.com".indexOf("https") >= 0 ? "包含" : "不包含");//不包含

// replace (注意:只替换了第一个)

alert("name=value%name=value%name=value".replace("%","&"));//name=value&name=value%name=value

// 继续调用replace方法,就会替换第“二”个.
// 想全部替换需要使用正则表达式.

alert("name=value%name=value%name=value".replace("%","&").replace("%","&"));//name=value&name=value&name=value

// 考点:经常问 substr和substring的区别?

// substr(startIndex, length)
alert("abcdefxyz".substr(2,4));//cdef
// substring(startIndex, endIndex) 注意:不包含endIndex
alert("abcdefxyz".substring(2,4));//cd

5、Object类型

java与js定义对象对比
java语言怎么定义类,怎么创建对象?(强类型)

public class User{
private String username;
private String password;
public User(){

}
public User(String username,String password){
this.username = username;
this.password = password;
}
}
User user = new User();
User user = new User("lisi","123");

JS语言怎么定义类,怎么创建对象?(弱类型)

User = function(username,password){
this.username = username;
this.password = password;
}
var u = new User();
var u = new User("zhangsan");
var u = new User("zhangsan","123");
  • 1、Object类型是所类型的超类,自定义的任何类型,默认继承Object。
  • 2、Object类包括哪些属性?
    prototype属性(常用的,主要是这个:作用是给类动态的扩展属性和函数。
    constructor属性
  • 3、Object类包括哪些函数?

toString()
valueOf()
toLocaleString()

  • 4、在JS当中定义的类默认继承Object,会继承Object类中所的属性以及函数。
    换句话说,自己定义的类中也有prototype属性。
  • 5、在JS当中怎么定义类?怎么new对象?
    定义类的语法:

第一种方式:
function 类名(形参){
}
第二种方式:
类名 = function(形参){
}

创建对象的语法:
new 构造方法名(实参); // 构造方法名和类名一致。

对象的定义:
var 变量名 =new Object(); // 对象实例(空对象)
变量名.属性名 = 值; // 定义一个属性
变量名.函数名 =function(){} // 定义一个函数

对象的访问:
变量名.属性 / 函数名();

演示:
//定义类的第一种方式

function  sayHello() {
    alert("sayHello")
}
// 把sayHello当做一个普通的函数来调用.
sayHello();//sayHello

// 这种方式就表示把sayHello当做一个类来创建对象.
var obj = new sayHello();//sayHello,obj是一个引用,保存内存地址指向堆中的对象.
    alert(obj);//[object Object]

// JS中的类的定义,同时又是一个构造函数的定义
// 在JS中类的定义和构造函数的定义是放在一起来完成的.
function User(a, b, c){ // a b c是形参,属于局部变量.
// 声明属性 (this表示当前对象)
// User类中个属性:sno/sname/sage
    this.sno = a;
    this.sname = b;
    this.age = c;
}

//创建对象
    var u1 = new User(1001,"张",25);
//访问对象的属性
    alert(u1.sno);//1001
    alert(u1.sname);//张
    alert(u1.age);//25

//创建对象
    var u2 = new User(1002,"李四",23);
// 访问一个对象的属性,还可以使用这种语法
    alert(u2["sno"]);//1002
    alert(u2["sname"]);//李四
    alert(u2["age"]);//23

定义类的另一种方法

    emp = function(ename,sal){
        //属性
        this.ename = ename;
        this.sal = sal;
    }

    var e1 = new emp("Tom",2000);
    alert(e1.ename +"," + e1["sal"]);//Tom,2000

    Product = function(pno,pname,price){
        //属性
        this.pno = pno;
        this.pname = pname;
        this.price = price;

        //函数
        this.getPrice = function () {
            return this.price;
        }
    }

    var xigua = new Product(1001,"西瓜",4.0);
    var pri = xigua.getPrice();
    alert(pri);//4.0

可以通过prototype这个属性来给类动态扩展属性以及函数

Product.prototype.getPname = function(){
    return this.pname;
}

// 调用后期扩展的getPname()函数
var pname = xigua.getPname();
alert(pname);//西瓜

// 给String扩展一个函数
    String.prototype.suiyi = function () {
        alert("这是给String类型扩展的一个函数.....")
    }

    "abc".suiyi();//这是给String类型扩展的一个函数.....

6、null NaN undefined区别

<script type="text/javascript">
    // null NaN undefined 数据类型不一致.
    alert(typeof null);//object
    alert(typeof NaN);//number
    alert(typeof undefined);//undefined

    // null和undefined可以等同.
    alert(null == NaN);//false
    alert(null == undefined);//true
    alert(undefined == NaN);//false

    // 在JS当中两个比较特殊的运算符
    // ==(等同运算符:只判断值是否相等)
    // ===(全等运算符:既判断值是否相等,又判断数据类型是否相等)
    alert(null === NaN);//false
    alert(null === undefined);//false
    alert(undefined === NaN);//false

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值