JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
JavaScript重难点解析1(数据类型)
- var、let、const区别:
- 类型补充
- “===”、“typeof”、“instanceof”区别
- Symbol数据类型
- 介绍
- 内置属性
var、let、const区别:
- var是函数作用域(一个函数内有效),而let和const是块作用域(一个大括号内有效)
if (true){let girl = '小明'}console.log(girl) //报错
- let和const不存在变量提升。
console.log(song) //报错console.log() //报错var name = "莫文蔚"let song = '盛夏的果实'
- 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”区别
- **===**判断两者类型和值是否都一致
可以判断: 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数据类型)相关推荐
- JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...
- JavaScript重难点解析4(作用域与作用域链、闭包详解)
JavaScript重难点解析4(作用域与作用域链.闭包详解) 作用域与作用域链 作用域 作用域与执行上下文 作用域链 闭包 闭包理解 将函数作为另一个函数的返回值 将函数作为实参传递给另一个函数调用 ...
- JavaScript重难点解析3(原型与原型链、执行上下文与执行上下文栈)
JavaScript重难点解析3(原型与原型链.执行上下文与执行上下文栈) 原型与原型链 原型(prototype) 显示原型与隐式原型 原型链 instanceof是如何判断 执行上下文与执行上下文 ...
- JavaScript重难点解析2(立即执行函数IIFE,this关键字)
JavaScript重难点解析2(立即执行函数IIFE,this关键字) 立即执行函数 this关键字 立即执行函数 也叫做匿名函数自调用,可以在定义一段函数之后直接让其执行. ;(function ...
- JavaScript重难点解析6(Promise)
JavaScript重难点解析6(Promise 概念 为什么要使用Promise Promise 的状态 Promise 对象的值 Promise工作流程 基本用法 Promise其他方法 asyn ...
- 快速排序的难点_数据结构考研重难点解析:快速排序
数据结构是计算机专业考研重点内容,大部分院校都是考到了数据结构,其中快速排序是其中的重点难点内容,因此中公考研计算机教研室为大家整理的"数据结构考研重难点解析:快速排序",希望对大 ...
- 跨考408计算机学科专业基础综合,考研北京航空航天大学计算机学科专业基础综合(408)重难点解析.doc...
2010年考研北京航空航天大学计算机学科专业基础综合(408)重难点解析 跨考专业课特别奉献,为广大考研学子加油助力! 1.操作系统 今天我们来解析一下计算统考大纲操作系统部分的知识点.操作系统的研发 ...
- 计算机学科专业基础综合简称,2010年考研北京大学计算机学科专业基础综合(408)重难点解析...
2010年考研北京大学计算机学科专业基础综合(408)重难点解析 考研全程辅导专家 2010年考研北京大学计算机学科专业基础综合(408)重难点解析 跨考专业课特别奉献,为广大考研学子加油助力! 计算 ...
- 【重难点】【Java基础 07】变量类型、内部类、处理器指令优化
[重难点][Java基础 07]变量类型.内部类.处理器指令优化 文章目录 [重难点][Java基础 07]变量类型.内部类.处理器指令优化 一.变量类型 1.对比 二.内部类 1.介绍 三.处理器指 ...
最新文章
- php和js中,utf-8编码转成base64编码
- [转载] 陈皓:一些重要的算法
- 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作
- 云原生生态周报 Vol. 2
- oracle审计实施
- 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题
- .net remoting 技术
- 要怎么样做一个合格点的程序猿呢?
- IOS:static和extern的使用
- IDEA+Maven搭建JavaWeb项目
- 在android中编程制作kml、kmz文件的思路
- 最全空降Golang资料补给包(满血战斗),包含文章,书籍,作者论文,理论分析,开源框架,云原生,大佬视频,大厂实战分享ppt
- 用python写一个恩格尔方格游戏
- Oracle EBS使用CSV导入Oracle Form及BOM清单导入 API
- 大唐移动android面试题,大唐移动面试经验
- LeetCode-70. 爬楼梯(java)
- 爱我,是不是因为怜悯
- 最新美团代付源码+支持多模板/多支付通道/全开源
- SpringBoot---MongoDB的简单使用
- 如何实现点击按钮后禁用按钮的功能?
热门文章
- Python学习之路_day_25(面向对象之封装/多态/组合)
- UINavigationBar的系统渲染方式
- 使用POI生成Excel文件,可以自动调整excel列宽
- 20个使用Bootstrap制作的前端框架网站案例
- HDU 1222 Wolf and Rabbit
- Python——杂记
- STL vector 用法介绍
- 1,通过代码自定义cell(cell的高度不一致)的基本步骤
- erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”
- 基于ZYNQ FPGA实现图像采集存储显示