5.12 js基础( 数据类型的分类,原始,引用,数据类型转换)

Js核心语法 day02

回顾:

  • Js的特点

  • Js用在何处?

  • 怎么声明变量 var a = 5

  • 为什么要有数据类型?

  • 操作符

  • 请判断以下代码是否有效?如果有效请给出结果,如果无效请说明原因。

    // 挑战一
    var class = 'person';
    console.log(class);
    // 挑战二
    var Class = 'person';
    console.log(class);  
    // 挑战三
    var True = false;
    console.log(True); 
    // 挑战四
    var true = false;
    console.log(True);     
    // 挑战五
    var $_$ = 'stone';
    console.log($_$);      
    // 挑战六
    var 00_name = 'stone';
    console.log(00_name);    
    // 挑战七
    var result = 1 + 2
    + 3 + 4
    console.log(result);    
    

目标:

  • 掌握数据类型的分类(重点)
  • 原始数据类型和引用设计类型的区别
  • 数据类型的转换

一、数据类型的分类

javascript中有两种数据类型,分别是基本数据类型和引用数据类型;

基本数据(原始数据)类型指的是简单的数据段,而引用数据类型则指的是由多个值构成的对象。

typeof 运算符

JavaScript 的 typeof 来确定 JavaScript 变量的类型:typeof 运算符返回变量或表达式的类型:

typeof ""                  // 返回 "string"
typeof "Bill"              // 返回 "string"
typeof "Bill Gates"          // 返回 "string"
1.1、原始数据类型
  • Number
  • string
  • boolean
  • null
  • underfined
1.2、引用数据类型
  • 对象 Object
  • 数组 Array
  • 函数 Function
  • Date 日期

1.3、原始数据类型和引用数据类型的区别

  • 声明变量时的存储分配
  • 不同的内存分配机制也带来了不同的访问机制
  • 复制变量时的不同

二、原始数据类型

2.1、JavaScript 字符串

字符串是存储字符(比如 “Bill Gates”)的变量。

字符串可以是引号中的任意文本。您可以使用单引号或双引号:

Var str=”xiaoming”

字符串的变量内容一旦创建不可改变!如果要改变,只能创建新的字符串,抛弃旧的字符串

面试题:

 var str=“hello”;
 str=str+”world”

请问这里共创建了几个字符串?

字符串模板
//var text = `字符串字符串字${变量}符串字符串`
2.2、JavaScript 数字 number

JavaScript 只有一种数字类型。数字可以带小数点,也可以不带:

var x1=34.00;      //使用小数点来写
var x2=34;         //不使用小数点来写

极大或极小的数字可以通过科学(指数)计数法来书写:

var y=123e5;      // 12300000
var z=123e-5;     // 0.00123
2.3、JavaScript 布尔

布尔(逻辑)只能有两个值:true 或 false。

var x=true;
var y=false;
2.4、 undefined类型

表示一个变量只有声明,没有赋值,它的值默认就是undefined

2.5、null类型

怎么去理解typeof null==>Object

  • 原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型,null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“object”。
  • 现在比较普遍的认知是,typeof null返回“object”是一个历史错误(JS的发明者Brendan Eich自己也是这样说的),只是因为要保持语言的兼容性而维持至今。从ES5制定开始就有动议将typeof null改为返回“null”(如启动node加上“–harmony_typeof”参数,即是如此),但是当前ES6标准草案仍然维持了原样。
  • 也可在某种程度上理解为null实为object类型的一个特殊值。在诸如Java这样的语言中,一个变量若是primitive类型,均不可赋以null值,而若是 object,则均可赋以null值。因为在理解上来说,null实际是引用(reference)的特殊值(表示没有指向任何实际对象)
  • ECMA是如何划分概念,主要是依据ECMA的逻辑,而不是其他标准。所以从ECMA的逻辑看,类型系统是这样划分的,也是合理的

可以通过将变量的值设置为 null 来清空变量。

Undefined 与 Null 的区别

Undefined 与 null 的值相等,但类型不相等:

目前,null和undefined基本是同义的。

**undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。**典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

var i;i // undefinedfunction f(x){console.log(x)}f() // undefinedvar  o = new Object();o.p // undefinedvar x = f();x // undefined
typeof undefined              // undefinedtypeof null                   // objectnull === undefined            // falsenull == undefined             // true
2.6、数据类型的转化
  • 隐式转换:程序自动转换的数据类型
  • 强制转换:通过js提供的方法去改变数类型(自己说了算)
2.6.1、隐式转换:

如果只考虑 + 的情况下:

  • 只要有字符串参与的,一切都变成字符串

  • 如果没有字符串参与,都转为数字计算 (true–1 false—0)

    //除0之外的所有数字,转换为布尔型都为true        var x = 0;        var y = 1;        console.log(Boolean(x));//false        console.log(Boolean(y))//true//除""之外的所有字符,都转为布尔型都为true        var stringWords = "welcome";        var stringKong = "";//空的        var kongge = " ";        console.log(Boolean(stringKong));//false        console.log(Boolean(stringWords))//true        console.log(Boolean(kongge))//true  空格布尔型也是true//null和undefined转换为布尔型为false        var y;        var x = null;        console.log(Boolean(y))//false        console.log(Boolean(x))//false
    
2.6.2、强制转化:自己说了算

概念:调用专门的函数手动的转化类型(系统提供的 内置的函数)

  • String x.toString() 转为字符串

    ​ 其中x可以是任何的数据类型

  • Number number(x):将任意类型转为number

  • 转为整数

    Var s=parseInt(“str”); 转为整数,读取字符串的整数部分

    从第一个字符往后面读取

    如果碰到第一个数字字符,开始获取数子,再次碰到不是数字的字符,停止读取。

    var topVal = parseInt("28px");console.log(topVal);//28
    

    如果开头碰到空格 忽略

    如果碰到第一个非空格的字符,不是数字说明不能转—NaN

    var z = parseInt("abc52");console.log(z);//NaN
    
  • NaN:不是数字(内容)的数字(类型)

  • parseFloat(“str”); 转为浮点型。用法和parseInt完全相同

    唯一的差别:parseFloat认识的小数点,但仅仅只认识一个小数点

在这里插入图片描述

2.7、数字 字符串 布尔(包装类型)
var str = 'hello'; //string 基本类型var s2 = str.charAt(0);在执行到这一句的时候 后台会自动完成以下动作 :(  var _str = new String('hello'); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象 var s2 = _str.chaAt(0); // 2 然后这个对象就可以调用包装对象下的方法,并且返回结给s2. _str = null;  //    3 之后这个临时创建的对象就被销毁了, str =null;  ) alert(s2); // h

上面的string是一个基本类型,但是它却能召唤出一个 charAt() 的方法,主要是因为在基本类型中,有三个比较特殊的存在就是:String Number Boolean,这三个基本类型都有自己对应的包装对象。包装对象,其实就是对象,有相应的属性和方法。调用方法的过程,是在后台偷偷发生的。

对于自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,执行完毕就会立即被销毁。
如下:

var str = 'test'str.test = 'hhh'console.log(str.test) //undefined

上面第二行代码给自动创建的 String 实例对象添加了 test 属性,虽然此刻代码执行时他是生效的,但是在这行代码执行完毕后该 String 实例就会立刻被销毁,String 实例的 test 属性也就不存在了。
当执行第三行代码时,由于是读取模式, String 实例没有 test 属性,结果也就是 undefined。

三、引用数据类型

3.1、JavaScript 数组

JavaScript 数组用方括号书写。

数组的项目由逗号分隔。

下面的代码声明(创建)了名为 cars 的数组,包含三个项目(汽车品牌):

实例
var cars = ["Porsche", "Volvo", "BMW"];

数组索引基于零,这意味着第一个项目是 [0],第二个项目是 [1],以此类推。

3.2、JavaScript 对象

JavaScript 对象用花括号来书写。

对象属性是 name:value 对,由逗号分隔。

实例
var person = {    Name:"张三",     age:62,     eyeColor:"black"};

上例中的对象(person)有三个属性:Name、age 以及 eyeColor。

练习题:
  • 弹出一个输入提示框,请用户输入一行数字,控制台中输出该输入数据的类型。

  • 尝试把用户的输入+1输出到控制台里面。

  • 尝试把用户的输入数据解析为一个整数,将该整数值+1 输出到控制台里面。

  • 尝试把用户的输入数据解析为一个浮点型,把浮点型数值+0.01 输出到控制台里面。

注意:用户体验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值