本文总结js中常用的知识,有些几乎用不到,或者属于设计缺陷,但是又必须知道,这些是我开发中总结的,如果有不正确的地方,请指出。
个人代码习惯分享:命名尽量语义化但又比较特殊,这样会避免命名冲突,即使全局局部变量会属于不同域也不要使用同名,长一点没关系,不太会英文怎么办?拼音!
一.变量
1.)在非严格模式下,全局变量不用var也可以直接用,但是这样并不好,会造成歧义,阅读会困难。所以正规的写法是提前声明。
2.)有一个概念叫变量提升,在函数内部,所有的变量都会被提升到函数体上部声明。
function upvar(){ console.log(x); var x = 0; } upvar();//打印undefined
变量声明在打印之后,即使在严格模式下也不会报错,原因是js机制把变量声明提前到函数体第一行,但是未赋值,所以上面的函数相当于:
function upvar(){ var x; console.log(x); x = 0; } upvar();//打印undefined
那么如果全局变量跟函数内局部变量同名呢?结果也是一样的。函数优先扫描内部函数。
var a = 2; function samenameA(){ console.log(a) var a = 3; } samenameA();//打印undefined
变量使用必须提前声明,使用前必须提前赋值。所以在我看来除非脑抽筋,不然不会写出这种代码。属于记住概念即可。
3.)this指向,取决于调用的方式(详见:Javascript的this用法)
在全局范围下,this指向window,也就是说可以使用this.变量调用全局变量,this.函数调用全局函数。
在对象内,指向当前对象。
在事件内,指向事件dom。
二.数据类型
JavaScript有五种方法可以确定一个值到底是什么类型,分别是typeof运算符,constructor法,instanceof运算符,Object.prototype.toString方法以及Array.isArray法.
1.)js有五中基本类型,一种引用类型
基本类型:String、Boolean、Number、undefind、null
引用类型:Object(Array、Date、RegExp、Function)
基本包装类型:Boolean、 Number、String
单体内置对象:Global对象、Math对象
基本类型是简单值,所见即所得,引用类型是复杂类型,其值是经过计算得到的。
2.)类型内置方法
object(所有引用对象都有继承):valueOf()、toLocaleString()、toString()
String方法:charAt()、charCodeAt()、concat()、slice()、 substr()、substring()、indexOf()、lastIndexOf()、trim()、toLowerCase()、 toLocaleLowerCase()、 toUpperCase()、toLocaleUpperCase()、match()、replace()、localeCompare()、fromCharCode()
substr,substring,slice解释
{
str.substr(start,[,length])
start
开始提取字符的位置。如果为负值,则被看作strLength +
start,其中
strLength
为字符串的长度(例如,如果start
为-3,则被看作
strLength-3)。
length
可选。提取的字符数
str.substring(indexstart,[,indexend])
如果参数小于0,则为0、如果start大于end,则调转参数位置、如果参数大于string.length,则等于string.length、如果相等则返回空
str.slice(beginslice,[,endslice])
beginSlice
从该索引(以 0 为基数)处开始提取原字符串中的字符。如果值为负数,会被当做 sourceLength + beginSlice
看待,这里的sourceLength 是字符串的长度
(例如, 如果beginSlice
是 -3 则看作是: sourceLength - 3
)endSlice
可选。在该索引(以 0 为基数)处结束提取字符串。如果省略该参数,slice
会一直提取到字符串末尾。如果该参数为负数,则被看作是 sourceLength + endSlice,这里的 sourceLength 就是字符串的长度(例如,如果 endSlice 是 -3,则是, sourceLength - 3)。
}
Boolean:true false 用typeof操作符可以做一些操作
Number:toFixed()、toExponential()、toPrecision()
Array:isArray()、push()、pop()、shift()、unshift()、reverse()、sort()、concat()、splice()、indexOf()、lastIndexOf()、every()、filter()、forEach()、map()、some()、reduce()、reduceRight()
Date:Date.parse()、 Date.UTC()
Global:isNaN()、isFinite()、parseInt()、parseFloat()、encodeURI、encodeURIcomponent()、decodeURI、decodeURIcomponent()、eval()
Math:Math.max()、Math.min()、Math.ceil()、Math.random()、Math.abc()、Math.exp()、Math.log()、Math.pow()、Math.sqrt()、Math.acos()、Math.asin()、Math.atan()、Math.atan2()、Math.cos()、Math.sin()、Math.tan()
三.对象
创建对象的方法
new、{}、object.create()
工厂模式、构造函数模式、原型模式、组合构造函数原型模式、动态原型模式
待更...