JS 学习笔记1

JS 初始介绍

学习来源:
https://wangdoc.com/javascript/types/number.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof
https://juejin.im/post/5b0b9b9051882515773ae714

概述

  • 在 JS 中,一共有 7 种数据类型,分别是 Number,String,Boolean, Object, null,undefined,symbol(ES6 新增)

    • 在这之中 Number,String,Boolean 是原始类型(primitive type)
    • Object 是合成类型 complex type,包括以下:
      • 狭义对象
      • array
      • function
    • null,undefined 是特殊值
  • typeof 运算符:用于确定一个值是什么类型,回传一个 String。实质上是通过数据存储中的类型标签判断。

    • typeof: 用于区分一般的数据类型,但是很明显下列代码中,无法区分 array 和 object。并且无法区分出 null
    • typeof null 的结果是 object。JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的标签是 0, null 代表空指针,大多数平台下为 0x00,因此 null 的类型标签也就变成是 0 了.
    • 同时除了 new function 以外, 所有用 new 宣告的的实例,typeof 返回的都是 ‘object’
    • 对正则表达式字面量的类型判断在某些浏览器中不符合标准,谨慎使用
    let a = {}
    console.log(typeof(a)) // object
    let b = []
    console.log(typeof(b)) // object
    let c = null
    console.log(typeof(c)) // object
    let d = () => {}
    console.log(typeof(d)) // function
    let e = new String('123')
    console.log(typeof e) // object
    let f = new Number(1)
    console.log(typeof f) // object
    let g = new Function()
    console.log(typeof g) // function
    
    • instanceof:应用这个可以区分 array 和 object。本质上来说 instance of 是用于判断一个实例是否属于某种类型。也可以判断一个实例是否是其父类型或者祖先类型的实例。
    let a = {}
    console.log(a instanceof Array) // object
    let b = []
        console.log(b instanceof Array) // array
    let person = function () {
    }
    let nicole = new person()
    nicole instanceof person // true
    
    • 一个比较好的判定内置数据类型的方法是 Object.prototype.toString
    Object.prototype.toString.call(1) // "[object Number]"
    Object.prototype.toString.call('hi') // "[object String]"
    Object.prototype.toString.call({a:'hi'}) // "[object Object]"	
    Object.prototype.toString.call([1,'a']) // "[object Array]"
    Object.prototype.toString.call(true) // "[object Boolean]"
    Object.prototype.toString.call(() => {}) // "[object Function]"
    Object.prototype.toString.call(null) // "[object Null]"
    Object.prototype.toString.call(undefined) // "[object Undefined]"
    Object.prototype.toString.call(Symbol(1)) // "[object Symbol]"
    
    • 同时在 ES6 下, typeof 不再是百分百安全的一行指令,有可能出现报错的情况。
    // exp1
    typeof(a) //'undefined' 安全执行
    var a = 1 
    // exp2 EX6
    typeof(a) // ReferenceError: a is not defined 报错。
    // 这里是由于 let 不会发生变量提升,并且存在暂时性死区
    // 简单来说就是,使用 let 宣告的变数,在没有宣告之前是无法获取的。
    // 用 var 宣告的变数,因为存在变量提升,所以会提升至代码的开头,所以实际上已经提前宣告过了
    // 但是没有赋值,所以是undefined
    let a = 1
    
  • 语句 与 表达式

    • 语句表示的是进行某种操作,一般不需要有返回值
    • 表达式是指的是为了得到某种结果的计算式,需要返回值
    • 范例: let a = 1 + 3
    • let a = 1 + 3 是一个赋值语句,1 + 3 是表达式
  • 变量

    • 在 JS 的世界中,如果宣告一个变量,却不给它赋值的话,那么这个变量就会是 undefined,这并不等于 not defined,如果想使用一个没有宣告过得变量,就会报错,并且会得到 not defined 的错误通知。
    • 变量提升:
      • 在 JS 的世界中存在一个特殊的机制,变量提升。
      • 变量提升说的是,js 在解析代码的时候,会将所有 var 的宣告语句放到最头部,这就叫变量提升(hoisting)。也就是说如果用 var 宣告一个变量,这个变量在你程式码的宣告顺序之前就可以调用,只是此时的结果是 undefined。
      • 上述特征只在 var 的变量有效,let 宣告的变量就不会发生。
console.log(b)
console.log(a)
let a
var b
// undefined
// a is not defined
  • 标识符

    • 定义:用于识别各种值的合法名称
  • 区块

    • JS 中用大括号表示代码区块,对于 var 指令而言,区块不构成单独的作用域。对于 var 宣告的参数而言,只存在函数作用域,全局作用域,并不存在区块作用域。
{
  var a = 1;
}

a // 1
  • 条件语句
    • JS 中 =, ==, ===,分别代表的意思是赋值,相等运算符,严格相等运算符
    • 为了防止日常使用的过程中,我们将 = 与另外二者搞混,比如说 if(x=2),这个语句是会正常执行,这样我们 debug 的时候可能会不太好发现,为了避免这种情况,通常在条件语句中,可以将常量放置于左边,避免该状况的发生,因为如果 if(2=x) 就会直接报错了,容易发现 bug。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值