农历2019即将过去,趁着年前几天上班事情少,整理了一下javascript的基础知识,在此给你们作下分享,喜欢的大佬们能够给个小赞。本文在github也作了收录。javascript
本人github: github.com/Michael-lzg前端
JavaScript 是弱类型语言,并且 JavaScript 声明变量的时候并无预先肯定的类型,变量的类型就是其值的类型,也就是说变量当前的类型由其值所决定,夸张点说上一秒种的 String,下一秒可能就是个 Number 类型了,这个过程可能就进行了某些操做发生了强制类型转换。vue
js 数据分为两种类型:原始数据类型和引用数据类型。java
1.基本数据类型是按值访问的,就是说咱们能够操做保存在变量中的实际的值;
2.基本数据类型的值是不可变的,任何方法都没法改变一个基本数据类型的值webpack
let name = 'zhangsan' name.substr() console.log(name) // 输出:zhangsan let age = 'firstblood' age.toUpperCase() console.log(age) // 输出:firstblood
substr()和 toUpperCase()方法后返回的是一个新的字符串,跟原来定义的变量 name 并无什么关系。git
3.基本数据类型不能够添加属性和方法github
let user = 'zhangsan' user.age = 18 user.method = function() { console.log('12345') } console.log(user.age) // 输出:undefined console.log(user.method) // 输出:undefined
4.基本数据类型的赋值是简单的赋值(不影响原变量的值)web
let a = 18 let b = a a++ console.log(a) // 输出:19 console.log(b) // 输出:18
5.基本数据类型的比较是值的比较算法
var a = '{}' var b = '{}' console.log(a === b) // 输出:true
6.基本类型的值在内存中占据固定大小的空间,被保存在栈内存中vue-cli
引用类型是存放在堆内存中的对象,变量实际上是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。
var obj1 = new Object() var obj2 = obj1 obj2.name = '我有名字了' console.log(obj1.name) // 我有名字了
一、toString()方法:注意,不能够转 null 和 underfined 二、String()方法:都能转
let ab = 'zhangsan' let bc = null let cd = undefined console.log(ab.toString()) // 输出:zhangsan console.log(bc.toString()) // error 报错 console.log(cd.toString()) // error 报错 console.log(String(ab)) // 输出:zhangsan console.log(String(bc)) // 输出:null console.log(String(cd)) // 输出:undefined
三、隐式转换:num + "",当 + 两边一个操做符是字符串类型,一个操做符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串
var a = true var str = a + '' console.log('str')
一、Number():能够把任意值转换成数值,若是要转换的字符串中有一个不是数值的字符,返回 NaN
二、parseInt()/parseFloat():parseFloat()把字符串转换成浮点数,parseFloat()和 parseInt 很是类似,不一样之处在与 parseFloat 会解析第一个. 遇到第二个.或者非数字结束若是解析的内容里只有整数,解析成整数。
var a = '12.3px' console.log(parseInt(a)) // 12 console.log(parseFloat(a)) // 12.3 let b = 'abc2.3' console.log(parseInt(b)) //NAN console.log(parseFloat(b)) //NAN
三、隐式转换
var str = '123' var num = str - 1 console.log(num) // 122
四、isNaN()函数用于判断是不是一个非数字类型,若是传入的参数是一个非数字类型,那么返回 true,不然返回 false
除了 0 ''(空字符串) null undefined NaN 会转换成 false 其它都会转换成 true
对于原始数据类型,咱们可使用 typeof()函数来判断他的数据类型。但他是无法用来区分引用数据类型的,由于全部的引用数据类型都会返回"object"。
typeof 'seymoe' // 'string' typeof true // 'boolean' typeof 10 // 'number' typeof Symbol() // 'symbol' typeof null // 'object' 没法断定是否为 null typeof undefined // 'undefined' typeof {} // 'object' typeof [] // 'object' typeof (() => {}) // 'function'
对于引用类型咱们使用 instanceof 来进行类型判断。
var obj = {} obj instanceof Object //true var arr = [] arr instanceof Array //true
在 javascript 高级程序设计中提供了另外一种方法,能够通用的来判断原始数据类型和引用数据类型
var arr = [] Object.prototype.toString.call(arr) == '[object Array]' //true var func = function() {} Object.prototype.toString.call(func) == '[object Function]' //true
constructor 做用和 instanceof 很是类似。但 constructor 检测 Object 与 instanceof 不同,还能够处理基本数据类型的检测。
var aa = [1, 2] console.log(aa.constructor === Array) //true console.log(aa.constructor === RegExp) //false console.log((1).constructor === Number) //true var reg = /^$/ console.log(reg.constructor === RegExp) //true console.log(reg.constructor === Object) //false
var str = new String('123') console.log(str.valueOf()) //123 var num = new Number(123) console.log(num.valueOf()) //123 var date = new Date() console.log(date.valueOf()) //1526990889729 var bool = new Boolean('123') console.log(bool.valueOf()) //true var obj = new Object({ valueOf: () => { return 1 } }) console.log(obj.valueOf()) //1
valueOf() 和 toString()在特定的场合下会自行调用。
先来看一个例子
let name = 'marko' console.log(typeof name) // "string" console.log(name.toUpperCase()) // "MARKO"
name 类型是 string,属于基本类型,因此它没有属性和方法,可是在这个例子中,咱们调用了一个 toUpperCase()方法,它不会抛出错误,还返回了对象的变量值。 缘由是基本类型的值被临时转换或强制转换为对象,所以 name 变量的行为相似于对象。name.toUpperCase()在幕后看起来以下:
console.log(new String(name).toUpperCase()) // "MARKO"
除 null 和 undefined 以外的每一个基本类型都有本身包装对象。也就是:String,Number,Boolean,Symbol 和 BigInt。
总结前端性能优化的方法
几种常见的JS递归算法
搭建一个vue-cli的移动端H5开发模板
封装一个toast和dialog组件并发布到npm
从零开始构建一个webpack项目
总结几个webpack打包优化的方法
一文读尽前端路由、后端路由、单页面应用、多页面应用
关于几个移动端软键盘的坑及其解决方案
浅谈JavaScript的防抖与节流