天天看点

day02-javascript数据类型 目标:

目录

 目标:

一、数据类型的分类

1.1、原始数据类型

1.2、引用数据类型

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

二、原始数据类型

2.1、JavaScript 字符串

2.2、JavaScript 数字 number

2.3、JavaScript 布尔

2.4、 undefined类型

2.5、null类型

2.6、数据类型的转化

2.7、数字 字符串 布尔(包装类型)

三、引用数据类型

3.1、JavaScript 数组

3.2、JavaScript 对象

 目标:

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

一、数据类型的分类

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 // undefined
​
function f(x){console.log(x)}
f() // undefined
​
var  o = new Object();
o.p // undefined
​
var x = f();
x // undefined      
typeof undefined              // undefined
typeof null                   // object
null === undefined            // false
null == 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认识的小数点,但仅仅只认识一个小数点

day02-javascript数据类型 目标:

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。

继续阅读