JS基础深入复习与总结 - 数据类型

JavaScript:是直译型的脚本语言。是一个动态类型,弱类型,基于原型的语言。需要通过解释器对语句进行翻译,而这个翻译官就是JS引擎。

脚本语言:需要一个宿主。依赖于引擎,在浏览器当中执行。

  • 动态类型:类型是可以变化的。

    var a = 1;
    a = "abc";// 由Number类型转为了字符串
    a = {};
    a = true;
    
  • 弱类型:程序员在开发的时候可以忽略类型。

    • 定义变量时,可以忽略类型。

      var a = true;
      var b = {};
      var c = "";
      var d = true;
      
    • 函数传参时,函数返回结果时,可以忽略类型。

      function run(a,b){
      	if(typeof a === "number" && typeof b === "number"){
              
          }else{
              
          }
          return 23;
      }
      run(1,2);
      run("a","b");
      run({},function(){})
      
    • 定义对象,设置属性时。可以忽略类型。

      var obj = {
      	a:true,
          b:"123",
          c:function(){
              
          }
      }
      obj.c = 567;
      var arr = [1,2,3];
      
  • 基于原型

    ​ 类,对象。 对象是通过类实例化出来的。 实例化:new

    ​ js是没有类的概念,没有继承。

    ​ JS是有对象的,JS当中可以将构造函数视为类。

    JS当中的继承,其实是对象继承对象。原型


计算机语言:

​ 程序员与计算机资源的是源码。

​ 计算机语言分为两部分:

  • 低级语言
    • 汇编语言:是指令。指令与机器语言的指令是1:1的关系。最终是由汇编器对其进行翻译,翻译为机器语言。
    • 机器语言:指令。这些指令为二进制。机器语言才是最底层的语言。
  • 高级语言
    * 编译型语言:c,c++。不能够直接运行,在运行之前需要一次性提前编译。生成一个相对应的执行文件。在服务器当中运行的是该文件。
    * 解释型语言:又称为直译型语言。javascript,shell,python。是程序在执行时进行解释(翻译),JS引擎会一行一行的对其进行翻译。
    * 混合型语言:拥有编译与解释共同的特点。 JAVA ,C#

一、JS基础深入复习与总结

1、数据类型

1.1、数据类型分类
  • 基本(值)类型

字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol ,BigInt

在基本类型中,有三个比较特殊的存在:String Number Boolean,由于这三个基本类型都有自己对应的包装对象,也被称之为基本包装类型。

  • 怎么生成一个基本包装类型的包装对象呢?
var str = "abcdefg";
// 包装对象,首先它是一个对象。包装的是你的基本数据类型。
var str1 = new String("abcdefg");
// Object会根据传入的参数,生成相对应类型的包装对象。
var str2 = new Object("abcdefg");
console.log(str1,str2);

var num1 = new Number(1234);
var num2 = new Object(1234);
console.log(num1,num2);

var bol1 = new Boolean(true);
var bol2 = new Object(true);
console.log(bol1,bol2);
  • 基本包装类型不是对象,为什么会有属性呢?

基本包装类型当中的属性与方法,全部都是来自于相对应包装对象的原型。会隐式执行下面案例当中的{}程序

// 对象:拥有属性或方法的值,可以称其为对象。
var userName = "刘德华";
console.log(userName.charAt(0));// 刘
// 隐式执行:
{
    // 创建一个String类型的包装对象,值为刘德华
    var _userName = new String("刘德华");
    // 输出
    console.log(_userName.charAt(0));
    // 将_userName在内存中清除。
    _userName = null;
}
  • 引用类型和基本包装对象的区别?

    // 答:生命周期不同。引用类型在定义之后,在自己的作用域执行完毕之前会一直保存在内存当中。而包装对象往往是一瞬间。
    // 定义一个对象类型。
    var obj = {
    age:12
    };
    console.log(obj.age);// 12
    
    
    // 定义了一个字符串类型的变量
    var str = "年龄";
    // 增加属性number值为20
    str.number = 20;
    // 会隐式执行:
    {
        // 生成一个包装对象
        var _str = new String("年龄");
        // 赋值
        _str.number = 20;
        // 清空
        _str = null;
        // console.log(_str);
    }
    console.log(str.number);// undefined
    // 会隐式执行
    {
        var _str2 = new String("年龄");
        console.log(_str2.number);
        _str2 = null;
    }
    
  • 如何给基本类型添加方法或者属性呢?

答:将属性或方法放置到相对应的包装函数的原型对象当中。

 // 练习:增加一个名字为last的方法,该方法返回字符串的最后一个字符
 String.prototype.last = function () {
     console.log("last 执行了",this);
     return this.charAt(this.length-1);
 }

var str = "我爱你中国,我亲爱的母亲,我为你流泪,也为你自豪!"
// console.log(str[0]);
// console.log(str.charAt(0));
console.log(str.last());// 输出str的最后一个字符
// {
//     var _str = new String("我爱你中国,我亲爱的母亲,我为你流泪,也为你自豪!");
//     _str.last();
// }
  • “ == ” 运算符将原始值和其包装对象视为相等,“ === ”全等运算符则视为不等。

    var str = "abc";
    var str1 = new String("abc");
    console.log(str == str1,str === str1);// true false
    
  • 最后,我们可以通过String(),Number(),Boolean()构造函数来显式创建包装对象。但是通常情况下不建议这么做。

  • 对象(引用)类型

对象(Object)、数组(Array)、函数(Function)

// 后面详细介绍
1.2、数据类型检测
  • typeof

JavaScript是一门弱语言,它在声明变量时无需确定变量的类型,JavaScript在运行时会自动判断。那么如何判断一个变量的类型呢,JavaScript提供了typeof运算符,用来检测一个变量的类型。

  • typeof运算符的返回类型为字符串 : undefined、boolean、 string 、 number 、 object 、 function

    • 可以区别: 数值, 字符串, 布尔值, undefined, function
    var a;
    console.log(typeof a);// undefined
    function fn(num) {
        console.log(typeof num);// undefined
    }
    console.log(typeof fn);// function
    console.log(typeof fn());// undefined
    var obj = {};
    console.log(obj.userName);// undefined
    
    // 如果写的是表达式加上括号,如果不写括号,那输出的是表达式的结果
    var bol = true;
    console.log(typeof bol);// boolean
    console.log(typeof(bol));// boolean
    console.log(typeof 1===1);// false
    console.log(typeof(1===1));// boolean
    
    var str = "123";
    console.log(typeof str);// string
    console.log(typeof str/1);// NaN
    console.log(typeof(str/1));// number
    
    var und = undefined;
    console.log(typeof und);// undefined
    
    • 不能区别: null与对象, 一般对象与数组
    var obj= {};
    var arr = [];
    console.log(typeof obj,typeof arr);// object object
    
    var n = null;
    console.log(typeof n);// object
    
  • instanceof

    console.log([1,2,3,4] instanceof Array);// true
    console.log(1 instanceof Array);// false
    
  • constructor 略

1.2(附加) in与hasOwnProperty的区别:
    var obj = {
        userName:"zhangsan"
    }
    obj.__proto__.run = function(){

    }
    // in 用于判断对象是否拥有指定属性。(属性在实例中或在原型链当中只要存在即为true)
    // hasOwnProperty 只判断实例
    console.log("userName" in obj);// true
    console.log(obj.hasOwnProperty("userName"));// true
    console.log("run" in obj);// true
    console.log(obj.hasOwnProperty("run"));// false
1.3、Undefined 和 Null
  • Undefined

Undefined类型只有一个值,即undefined。

// Undefined类型只有一个值,即undefined。
console.log(undefined in window);// true

常见的生成Undefined的环境:

  • 变量被声明了,但没有赋值时,就等于undefined

    var a;
    console.log(a);// undefined
    
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined

    function fn(a,b){
    	console.log(a,b);// 1 undefined
    }
    fn(1);
    
  • 对象没有赋值的属性,该属性的值为undefined

    var obj = {
    	userName:"zhangsan";
    }
    console.log(obj.userName,obj.age);// zhangsan undefined
    
  • 函数没有返回值时或return右侧没有内容时,默认返回undefined

    // return右侧没有内容时
    function fn() {
        return;
    }
    console.log(fn());// undefined
    
    // 没有返回值时
    function fn2() 
    }
    console.log(fn2());// undefined
    

Undefined常被用于条件判断

// 复习条件判断。undefined如果直接作为判断条件,为false
if(1===1){
	console.log("成立");
}
if(true){
	console.log("成立2");
}
if(undefined){
	console.log("不成立1");
}
if(!undefined){
	console.log("成立3");
}
if(0){// false
    console.log("不成立2");
}
if(""){// false
    console.log("不成立3");
}

// 1、判断函数接收的参数。 0 "" false不考虑
function fn(a) {
    if(a){
        console.log("有值");
    }else{
        console.log("无值");
    }
}
// 2、判断函数接收的参数。考虑0 "" false
function fn2(a){
    if(a !== undefined){
        console.log("有值")
    }else console.log("无值")
}
// fn2("");

// 3、判断对象是否拥有指定的属性
var obj = {
    userName:"zhangsan"
}
// 如果考虑0 false "" ,条件更改为if(obj.userName !== undefined)
if(obj.userName){
    // 有值
    console.log("有值")
}else console.log("无值")
  • Null

    # 道理经:无,万物之始也,有,万物之母也。
    

null 类型是第二个只有一个值的数据类型,这个特殊的值是 null

从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因。

console.log(typeof null);// object

常见Null的环境:

  • 作为函数的参数,当你不想传,或者是不需要传参数时,可以使用null.

    // obj 接收的一个形参。要求接收的类型是一个对象
    function fn(obj,a){
        if(obj === null) return;
        if(typeof obj === "object"){
            console.log("123");
        }
    }
    fn(null,1);
    
  • 作为对象原型链的终点

    function Box(){
    
    }
    var box = new Box();
    // box 是通过构造函数Box实例化(new)出来
    // box.__proto__ === Box.prototype
    console.log(box.__proto__ === Box.prototype);// true
    console.log(Box.prototype.__proto__ === Object.prototype);// true
    console.log(Object.prototype.__proto__);// null
    

Null的使用场景:

  • 初始赋值, 表明要赋值的对象为null

    // 未来该值有可能是对象的话,初始值可以设置为null.
    var obj = null;// 将初始值设置为null,说明后面有可能要将其设置为一个对象
    // .... 逻辑
    obj = {
        a:1,
        b:2
    };
    
    var str = ""; // 说明后续值应该是一个字符串
    var where = null;
    var keyword = ""
    if(接收的关键字是否符合要求){
       where= {
           keyword:keywored
       }
    }
    
  • 内存回收:将值设置为 null,可以对其进行回收。

    var a = 1;
    var b = {};
    a = null;
    b = null;
    
  • null和undefined的区别:
  • undefined 代表变量没有赋值
  • null 代表变量赋值,只是值为null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值