JavaScript重难点解析1(数据类型)

  • var、let、const区别:
  • 类型补充
  • “===”、“typeof”、“instanceof”区别
  • Symbol数据类型
    • 介绍
    • 内置属性

var、let、const区别:

  1. var是函数作用域(一个函数内有效),而let和const是块作用域(一个大括号内有效)
       if (true){let girl = '小明'}console.log(girl) //报错
  1. let和const不存在变量提升。
      console.log(song) //报错console.log() //报错var name = "莫文蔚"let song = '盛夏的果实'
  1. let和const不可重复定义。
       let a =  '123'let a = '456' //报错

通过let可以解决循环绑定事件的问题。

 for(let i = 0;i<items.length;i++){items[i].onclick = function(){//修改当前元素的背景颜色// this.style.background = 'pink'items[i].style.background = 'pink' //代码生效,定义的变量只在{}内有效,不受异步函数影响 ,如果为var则报错,具体原因参考js异步问题}}//还不懂可以把上面代码理解为如下顺序执行的三个代码块:{let i = 0items[i].onclick = function(){//修改当前元素的背景颜色// this.style.background = 'pink'items[i].style.background = 'pink'//代码生效,定义的变量只在{}内有效,不受异步函数影响 ,如果为var则报错,具体原因参考js异步问题}}{let i = 1items[i].onclick = function(){//修改当前元素的背景颜色// this.style.background = 'pink'items[i].style.background = 'pink'//代码生效,定义的变量只在{}内有效,不受异步函数影响 ,如果为var则报错,具体原因参考js异步问题}}{let i = 2items[i].onclick = function(){//修改当前元素的背景颜色// this.style.background = 'pink'items[i].style.background = 'pink'//代码生效,定义的变量只在{}内有效,不受异步函数影响 ,如果为var则报错,具体原因参考js异步问题}}

const除了let有的特性外如果它赋值为基本数据类型则变量值不可修改,如果赋值为引用类型则他所指的地址不能修改,但地址所存储的对象可以改变。

       const PLAYER = 'UZI' //一定要赋初始值,一般常量使用大写(潜规则)PLAYER = 'Thesky' //报错,常量不可修改const a = [1,2,3,4,5];a.push(6) //允许修改引用对象内容

类型补充

只要学过Javacript对它的数据类型肯定不陌生,相关介绍的教程网上也不少,这里就不再做过多的赘述。
稍微对对象数据类型补充一下

Function: 一种特别的对象,它存储了一系列代码片段,可以通过加()来执行里面的内容。这里补充一个运算符“()”,这个运算符对函数对象使用,执行该对象中保存的代码。

a = function () {console.log('我执行了')}
a() //打印我执行了

Array: 也一种特别的对象,可以通过数值下标取值, 内部数据是有序的。

string类型有些特殊,因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。但是另一方面,字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容),因此可以将字符串看成行为与基本类型相似的不可变引用类型(摘自)。

“===”、“typeof”、“instanceof”区别

  1. **===**判断两者类型和值是否都一致
    可以判断: undefined, null,因为这两个类型只有一个值。
var a
console.log(a===undefined) //true
a = null
console.log(a===null) // true

2.typeof返回数据类型的字符串表达
可以判断: undefined/ 数值 / 字符串 / 布尔值 / function
不能判断: null与object object与array

var a
console.log(typeof a==='undefined')  // true
console.log(a===undefined) //true
console.log(undefined===typeof a) // false 注意typeof返回的是字符串
a = 4
console.log(typeof a==='number') //true
//string、boolean与number类似a = null
console.log(typeof a) // 'object'
var b = [1,2,3]
console.log(typeof a) // 'object'
console.log(typeof a === typeof b) //true//注意函数也可以用typeof来判断
a = function () {console.log('b3')}
console.log(typeof a === 'function') //true

2.instanceof判断对象的具体类型
返回一个布尔值,表示该对象是不是一个类的实例。

 var b = {b1: [1, 'a', null],}}console.log(b instanceof Object) //trueconsole.log(b instanceof Array) //  falseconsole.log(b.b1 instanceof Array) // true

Symbol数据类型

介绍

ES6引入了一种新的数据类型叫Symbol,它与字符串类似,但值独一无二,它不能和其他数据进行运算。

let s1 = Symbol()
let s2 = Symbol("aaa") //描述字符串,用于区分console.log(typeof s1) //"symbol"let s3 = Symbol("aaa")
console.log(s3 === s2) //false,每个sympol唯一let s4 = Symbol.for("bbb") //第二种创建方式,这种创建方法可以通过字符串得到唯一的sympol值
let s5 = Symbol.for("bbb")
console.log(s4 === s5)  //truea = s1 + 100 //报错,symbol不能运算

内置属性

ES6中sympol常被用作一些对象的内置属性来运用。
Symbol.hasInstance可以修改对象的instanceof方法。

        class Person{static [Symbol.hasInstance](param){console.log(param);//instanceof前的对象console.log("我被用来检测类型了");return false;//返回结果}}let o = new Person();console.log(o instanceof Person);//会依次打印{}、我被用来检测类型了、false

Symbol.isConcatSpreadable可以修改对数组的concat方法,设置为false会让数组concat方法调用时不拆开数组。

     const arr = [1,2,3];const arr2 = [4,5,6];arr2[Symbol.isConcatSpreadable] = false;console.log(arr.concat(arr2)); //[1,2,3,[4,5,6]]

这里举两个例子,其他属性用法类似具体可以参考这里。

JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)相关推荐

  1. JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))

    JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...

  2. JavaScript重难点解析4(作用域与作用域链、闭包详解)

    JavaScript重难点解析4(作用域与作用域链.闭包详解) 作用域与作用域链 作用域 作用域与执行上下文 作用域链 闭包 闭包理解 将函数作为另一个函数的返回值 将函数作为实参传递给另一个函数调用 ...

  3. JavaScript重难点解析3(原型与原型链、执行上下文与执行上下文栈)

    JavaScript重难点解析3(原型与原型链.执行上下文与执行上下文栈) 原型与原型链 原型(prototype) 显示原型与隐式原型 原型链 instanceof是如何判断 执行上下文与执行上下文 ...

  4. JavaScript重难点解析2(立即执行函数IIFE,this关键字)

    JavaScript重难点解析2(立即执行函数IIFE,this关键字) 立即执行函数 this关键字 立即执行函数 也叫做匿名函数自调用,可以在定义一段函数之后直接让其执行. ;(function ...

  5. JavaScript重难点解析6(Promise)

    JavaScript重难点解析6(Promise 概念 为什么要使用Promise Promise 的状态 Promise 对象的值 Promise工作流程 基本用法 Promise其他方法 asyn ...

  6. 快速排序的难点_数据结构考研重难点解析:快速排序

    数据结构是计算机专业考研重点内容,大部分院校都是考到了数据结构,其中快速排序是其中的重点难点内容,因此中公考研计算机教研室为大家整理的"数据结构考研重难点解析:快速排序",希望对大 ...

  7. 跨考408计算机学科专业基础综合,考研北京航空航天大学计算机学科专业基础综合(408)重难点解析.doc...

    2010年考研北京航空航天大学计算机学科专业基础综合(408)重难点解析 跨考专业课特别奉献,为广大考研学子加油助力! 1.操作系统 今天我们来解析一下计算统考大纲操作系统部分的知识点.操作系统的研发 ...

  8. 计算机学科专业基础综合简称,2010年考研北京大学计算机学科专业基础综合(408)重难点解析...

    2010年考研北京大学计算机学科专业基础综合(408)重难点解析 考研全程辅导专家 2010年考研北京大学计算机学科专业基础综合(408)重难点解析 跨考专业课特别奉献,为广大考研学子加油助力! 计算 ...

  9. 【重难点】【Java基础 07】变量类型、内部类、处理器指令优化

    [重难点][Java基础 07]变量类型.内部类.处理器指令优化 文章目录 [重难点][Java基础 07]变量类型.内部类.处理器指令优化 一.变量类型 1.对比 二.内部类 1.介绍 三.处理器指 ...

最新文章

  1. php和js中,utf-8编码转成base64编码
  2. [转载] 陈皓:一些重要的算法
  3. 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作
  4. 云原生生态周报 Vol. 2
  5. oracle审计实施
  6. 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题
  7. .net remoting 技术
  8. 要怎么样做一个合格点的程序猿呢?
  9. IOS:static和extern的使用
  10. IDEA+Maven搭建JavaWeb项目
  11. 在android中编程制作kml、kmz文件的思路
  12. 最全空降Golang资料补给包(满血战斗),包含文章,书籍,作者论文,理论分析,开源框架,云原生,大佬视频,大厂实战分享ppt
  13. 用python写一个恩格尔方格游戏
  14. Oracle EBS使用CSV导入Oracle Form及BOM清单导入 API
  15. 大唐移动android面试题,大唐移动面试经验
  16. LeetCode-70. 爬楼梯(java)
  17. 爱我,是不是因为怜悯
  18. 最新美团代付源码+支持多模板/多支付通道/全开源
  19. SpringBoot---MongoDB的简单使用
  20. 如何实现点击按钮后禁用按钮的功能?

热门文章

  1. Python学习之路_day_25(面向对象之封装/多态/组合)
  2. UINavigationBar的系统渲染方式
  3. 使用POI生成Excel文件,可以自动调整excel列宽
  4. 20个使用Bootstrap制作的前端框架网站案例
  5. HDU 1222 Wolf and Rabbit
  6. Python——杂记
  7. STL vector 用法介绍
  8. 1,通过代码自定义cell(cell的高度不一致)的基本步骤
  9. erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”
  10. 基于ZYNQ FPGA实现图像采集存储显示