对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索、发现、征服。
我们都知道,JavaScript有3大对象,分别是`本地对象`、`内置对象`和`宿主对象`。
在此引用ECMA-262(ECMAScript的制定标准)对于他们的定义:
* 本地对象
* 与宿主无关,独立于宿主环境的ECMAScript实现提供的对象。
* 简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。
* 这些引用类型在运行过程中需要通过new来创建所需的实例对象。
* 包含:`Object`、`Array`、`Date`、`RegExp`、`Function`、`Boolean`、`Number`、`String`等。
* 内置对象
* 与宿主无关,独立于宿主环境的ECMAScript实现提供的对象。
* 在 ECMAScript 程序开始执行前就存在,本身就是实例化内置对象,开发者无需再去实例化。
* 内置对象是本地对象的子集。
* 包含:`Global`和`Math`。
* ECMAScript5中增添了`JSON`这个存在于全局的内置对象。
* 宿主对象
* 由 ECMAScript 实现的宿主环境提供的对象,包含两大类,一个是宿主提供,一个是自定义类对象。
* 所有非本地对象都属于宿主对象。
* 对于嵌入到网页中的JS来说,其宿主对象就是浏览器提供的对象,浏览器对象有很多,如`Window`和`Document`等。
* 所有的`DOM`和`BOM`对象都属于宿主对象。
> 关于专业名词:本地对象也经常被叫做原生对象或内部对象,包含Global和Math在内的内置对象在《JavaScript高级程序设计》里也被叫做单体内置对象,很多时候,干脆也会直接把本地对象和内置对象统称为“内置对象”,也就是说除了宿主对象,剩下的都是ECMAScript的内部的“内置”对象。
>
> 声明:本文也将采取这种统称为“内置对象”的方式,比如文章标题。
# Object类型
## 属性
**constructor**
**prototype**
## 实例方法
**1、toString()**
功能:返回当前对象的字符串形式,返回值为String类型。
示例:
~~~
[1,'2',true].toString(); //"1,2,true"
(new Date()).toString(); //"Sun Sep 24 2017 14:52:20 GMT+0800 (CST)"
({name:'ryan'}).toString(); //"[object Object]"
~~~
> 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。
>
> JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。
**2、toLocaleString**
功能:返回当前对象的"本地化"字符串形式,以便于当前环境的用户辨识和使用,返回值为String类型。
示例:
~~~
(1234567).toLocaleString(); //"1,234,567"
(6.37588).toLocaleString(); //"6.376"
(new Date()).toLocaleString(); //"2017/9/24 下午2:58:21"
~~~
**3、valueOf()**
功能:返回指定对象的原始值。
> JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。
## 静态方法
**1、Object.assign(target, ...sources)**
功能:把一个或多个源对象的可枚举、自有属性值复制到目标对象中,返回值为目标对象。
参数:
* 目标对象(必须)
* 至少一个源对象(可选)
示例:
~~~
var target = {
a:1
};
var source1 = {
b:2
};
var source2 = {
c:function(){
console.log('c');
}
};
Object.assign(target,source1,source2);
console.log(target); //{a: 1, b: 2, c: ƒ}
~~~
拓展:自定义实现一个assign方法
~~~
//自定义一个assign方法
function copy(target){
if(target == null){
throwError('出错:Cannot convert undefined or null to object');
}
var target = new Object(target);
for(var i = 1;i < arguments.length;i ++){
var source = arguments[i];
for(var key in source){
if(source.hasOwnProperty(key)){
//若当前属性为源对象自有属性,则拷贝至目标对象
target[key] = source[key];
}
}
}
return target;
}
~~~
**2、Object.create(proto \[,propertiesObject\])**
功能:创建一个对象,其原型为prototype,同时可添加多个属性。
参数:
* proto(必须):原型对象,可以为null表示没有原型。
* descriptors(可选):包含一个或多个属性描述符的对象。
propertiesObject参数详解:
* 数据属性
* value:值
* writable:是否可修改属性的值
* configurable:是否可通过delete删除属性,重新定义
* enumerable:是否可for-in枚举
* 访问属性
* get():访问
* set():设置
示例:
~~~
function Person(name){
this.name = name;
}
Person.prototype.say = function(){console.log('my name is ' + this.name +',my age is ' + this.age);}
var person = new Person('ryan');
var p = Object.create(person,{
age:{
value: 23,
writable: true,
configurable: true
},
sex:{
configurable: true,
get:function(){return sex + '士';},
set:function(value){sex = value;}
}
});
p.sex = '男';
p.say(); //'my name is ryan,my age is 23'
console.log(p.sex); //'男士'
p.sex = '女';
console.log(p.sex); //'女士'
~~~
> 总结:Object.create(proto \[,propertiesObject\]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个可选参数是对象的属性描述符。
**3、Object.defineProperty(obj, prop, descriptor)**
功能:在一个对象上定义一个新属性或修改一个现有属性,并返回该对象。
参数:
* obj(必须):被操作的目标对象
* prop(必须):被定义或修改的目标属性
* descriptor(必须):属性的描述符
示例:
~~~
var obj = {};
Object.defineProperty(obj,'name',{
writable: true,
configurable: true,
enumerable: false,
value: '张三'
});
console.log(obj.name); //'张三'
for(var key in obj){
console.log(obj[key]); //无结果
}
~~~
> 总结:在参数 descriptor中,如果不指定configurable, writable, enumerable ,则这些属性默认值为false,如果不指定value, get, set,则这些属性默认值为undefined。
**4、Object.defineProperties(obj, props)**
功能:在一个对象上定义一个或多个新属性或修改现有属性,并返回该对象。
参数:
* obj(必须):被操作的目标对象
* props(必须):该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置
示例:
~~~
var obj = {};
Object.defineProperties(obj,{
name:{
writable: true,
configurable: true,
enumerable: false,
value: '张三'
},
age:{
writable: true,
configurable: true,
enumerable: true,
value: 23
}
});
console.log(obj.name); //'张三'
console.log(obj.age); //23
for(var key in obj){
console.log(obj[key]); //23
}
~~~
**5、Object.seal(obj) / Object.isSealed(obj)**
功能:密封对象,阻止其修改现有属性的配置特性,即将对象的所有属性的configurable特性设置为false(也就是全部属性都无法重新配置,唯独可以把writable的值由true改为false,即冻结属性),并阻止添加新属性,返回该对象。
参数:
* obj(必须):被密封的对象
示例:
~~~
var obj = {name:'张三'};
Object.seal(obj);
console.log(Object.isSealed(obj)); //true
obj.name = '李四'; //修改值成功
console.log(obj.name); //'李四'
obj.age = 23; //无法添加新属性
console.log(obj.age); //undefined
Object.defineProperty(obj,'name',{
writable: true,
configurable: true,
enumerable: true
}); //报错:Cannot redefine property: name
~~~
补充:Object.isSealed(obj)用于判断目标对象是否被密封,返回布尔值。
> 将一个对象密封后仅能保证该对象不被扩展且全部属性不可重配置,但是原属性值却是可以被修改的。
**6、Object.freeze(obj) / Object.isFrozen(obj)**
功能:完全冻结对象,在seal的基础上,属性值也不可以修改,即每个属性的wirtable也被设为false。
参数:
* obj(必须):被冻结的对象
示例:
~~~
var obj = {name:'张三'};
Object.freeze(obj);
console.log(Object.isFrozen(obj)); //true
obj.name = '李四'; //修改值失败
console.log(obj.name); //'张三'
obj.age = 23; //无法添加新属性
console.log(obj.age); //undefined
Object.defineProperty(obj,'name',{
writable: true,
configurable: true,
enumerable: true
}); //报错:Cannot redefine property: name
~~~
补充:Object.isFrozen(obj)用于判断目标对象是否被冻结,返回布尔值。
**7、getOwnPropertyDescriptor(obj, prop)**
功能:获取目标对象上某自有属性的配置特性(属性描述符),返回值为配置对象。
参数:
* obj(必须):目标对象
* prop(必须):目标自有属性
示例:
~~~
var obj = {};
Object.defineProperty(obj,'name',{
writable: true,
configurable: false,
enumerable: true,
value: '张三'
});
var prop = Object.getOwnPropertyDescriptor(obj,'name');
console.log(prop); //{value: "张三", writable: true, enumerable: true, configurable: false}
~~~
**8、Object.getOwnPropertyNames(obj)**
功能:获取目标对象上的全部自有属性名(包括不可枚举属性)组成的数组。
参数:
* obj(必须):目标对象
示例:
~~~
var obj = {};
obj.say = function(){};
Object.defineProperties(obj,{
name:{
writable: true,
configurable: true,
enumerable: true,
value: '张三'
},
age:{
writable: true,
configurable: true,
enumerable: false,
value: 23
}
});
var arr = Object.getOwnPropertyNames(obj);
console.log(arr); //["say", "name", "age"]
~~~
**9、Object.getPrototypeOf(obj)**
功能:获取指定对象的原型,即目标对象的prototype属性的值。
参数:
* obj(必须):目标对象
示例:
~~~
function Person(name){
this.name = name;
}
var person = new Person('张三');
var p = Object.create(person); //对象p的原型为person
console.log(p); //Person {}
var __ptoto__ = Object.getPrototypeOf(p);
console.log(__ptoto__); //Person {name: "张三"}
~~~
**10、Object.setPrototypeOf(obj, proto)**
功能:设置目标对象的原型为另一个对象或null,返回该目标对象。
参数:
* obj(必须):目标对象
* proto(必须):原型对象
示例:
~~~
var obj = {a:1};
var proto = {};
Object.setPrototypeOf(obj,proto); //设置obj对象的原型
proto.b = 2; //为该原型对象添加属性
proto.c = 3;
console.log(obj.a); //1
console.log(obj.b); //2
console.log(obj.c); //3
~~~
解析:上述代码将proto对象设为obj对象的原型,所以从obj对象上可以顺利读取到proto 对象的属性,也就是原型链上的属性。
> Object.setPrototypeOf()方法的作用与\_\_proto\_\_相同,用来设置当前对象的原型指向的对象(prototype)。它是 ES6 正式推荐的设置原型对象的方法。
**11、Object.keys(obj)**
功能:获取目标对象上所有可枚举属性组成的数组。
参数:
* obj(必须):目标对象
示例:
~~~
var person = {
type:'person',
say:function(){}
};
//以person对象为原型,创建obj对象
var obj = Object.create(person,{
sex:{
writable: true,
configurable: true,
enumerable: false, //设置sex属性为不可枚举
value: 'male'
},
age:{
writable: true,
configurable: true,
enumerable: true, //设置age属性为可枚举
value: 23
}
});
obj.name = '张三'; //自定义属性name默认为可枚举
console.log(obj.propertyIsEnumerable('name')); //true,成功验证name属性为可枚举
//用for-in可获取obj上全部可枚举的属性(包括自有和原型链上的)
var arr = [];
for(var key in obj){
arr.push(key);
}
console.log(arr); //["age", "name", "type", "say"]
//用Object.keys()可获取obj上全部可枚举的自有属性
console.log(Object.keys(obj)); // ["age", "name"]
~~~
> 总结:Object.keys(obj)方法获取的集合和for-in遍历获取的不同在于,Object.keys()只获取目标对象上可枚举的自有属性,而for-in遍历会包含原型链上可枚举属性一并获取。
>
> Object.keys()和Object.getOwnPropertyNames()的相同之处都是获取目标对象的自有属性,区别在于,后者会连同不可枚举的自有属性也一并获取组成数组并返回。
**12、Object.preventExtensions(obj) / Object.isExtensible(obj)**
功能:使某一对象不可扩展,也就是不能为其添加新属性。
参数:
* obj(必须):目标对象
补充:Object.isExtensible(obj)方法用于判断一个对象是否可扩展,即是否可以添加新属性。
示例:
~~~
var obj = {
name: '张三'
};
Object.preventExtensions(obj); //阻止obj的可扩展性
console.log(Object.isExtensible(obj)); //false,表明obj对象为不可扩展,即阻止成功
obj.age = 23; //默认添加失败
console.log(obj.age); //undefined
~~~
# Array类型
## Array 对象属性
**1、length**
设置或返回数组中元素的数目。
> 设置 length 属性可改变数组的大小。如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined。
**2、constructor**
返回对创建此对象的数组函数的引用。
**3、prototype**
使您有能力向对象添加属性和方法。
## Array 对象方法
**1、concat()**
* 用于连接两个或多个数组,该方法不会改变现有的数组,而是返回被连接数组的一个副本。
* 如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。
**2、join()**
* 把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的。
* 若省略了分隔符参数,则使用逗号作为分隔符。
**3、push()**
* 向数组的末尾添加一个或多个元素,并返回新的数组长度。
**4、pop()**
* 用于删除数组的最后一个元素,把数组长度减1,并返回被删除元素。
* 如果数组已经为空,则 pop() 不改变数组,并返回 undefined。
**5、shift()**
* 用于把数组的第一个元素从其中删除,并返回被移除的这个元素。
* 如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined。
* 该方法是直接修改原数组。
**6、unshift()**
* 向数组的开头添加一个或更多元素,并返回新的数组长度。
* 该方法是直接修改原数组。
**7、reverse()**
* 用于颠倒数组中元素的顺序。
* 该方法会直接修改原数组,而不会创建新数组。
**8、sort()**
* 用于对数组的元素进行排序。
* 该排序直接修改原数组,不生成副本。
* 该方法接受一个可选参数,若未使用参数,将按字母顺序对数组元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
* 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
* 若 a 小于 b,排序后 a 应该在 b 之前,则返回一个小于 0 的值。
* 若 a 等于 b,则返回 0。
* 若 a 大于 b,则返回一个大于 0 的值。
**9、slice(start \[,end\])**
* 截取原数组从start到end位置(不包含它)元素组成的子数组。
* 该方法返回一个新数组,不会修改原数组。
* 若未指定end参数,那么截取尾巴直到原数组最后一个元素(包含它)。
**10、splice(index,howmany \[,item1,item2...\])**
* 删除从 index 处开始的hownamy个元素,并且用可选参数列表中声明的一个或多个值来替换那些被删除的元素。
* 该方法返回的是含有被删除的元素组成的数组,若无被删元素,则返回空数组。
* 若参数只有index,那么原数组将从index开始删除直至结尾。
* 该方法直接修改原数组。
map():返回一个新的Array,每个元素为调用func的结果
filter():返回一个符合func条件的元素数组
some():返回一个boolean,判断是否有元素是否符合func条件
every():返回一个boolean,判断每个元素是否符合func条件
forEach():没有返回值,只是针对每个元素调用func
reduce():reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。需要注意的是,reduce方法返回值并不是数组,而是形如初始值的经过叠加处理后的操作。
# Date类型
Date对象:封装一个时间点,提供操作时间的API。Date对象中封装的是从1970年1月1日0点至今的毫秒数。
**创建Date对象4种方式**
~~~
var now = new Date(); //获取客户端的当前系统时间
var date - new Date("1994/02/04 03:23:55"); //创建自定义时间
var date = new Date(yyyy, MM, dd, hh, mm, ss); //创建自定义时间
var oldDate = new Date("1994/02/04");
var newDate = new Date(oldDate); //复制一个时间对象
~~~
**日期API**
日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds。
每一个日期分量都有一个`get`和`set`方法(除了Day没有set方法),分别用于获取和设置时间对象。
> 日期的单位及范围:
>
> 年FullYear (无范围)
> 月Month (0~11, 0开始,没有12)
> 日Date (1~31, 和现实生活一样)
> 星期Day (0~6, 0是星期日,没有7)
> 时Hours (0~23. 0开始,没有24)
> 分Minutes (0~59)
> 秒Seconds (0~59)
> 毫秒MilliSeconds
# RegExp类型
### RegExp对象属性
**1、global**
* 描述:RegExp 对象是否具有标志 g,即全局匹配。
* 值:true或false。
**2、ignoreCase**
* 描述:RegExp 对象是否具有标志 i,即忽略大小写。
* 值:一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
**3、lastIndex**
* 描述:lastIndex用于规定下次匹配的起始位置。
* 值:true或false。
> 不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。
### RegExp对象方法
**1、compile()**
* compile() 方法用于在脚本执行过程中编译正则表达式。
* compile() 方法也可用于改变和重新编译正则表达式。
**2、exec()**
* 功能:用于检索字符串中的正则表达式的匹配。
* 参数:string,必须,要检索的字符串。
* 返回值:返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
**3、test()**
* 功能:用于检测一个字符串是否匹配某个模式。
* 参数:string,必须,要检索的字符串。
* 返回值:true或者false。
> 注意:支持正则表达式的 String 对象的方法有:search()、match()、replace()和split()。
# Function类型
## Function对象属性
**1、arguments**
* arguments.length:获取函数实参的个数
* arguments.callee:获取函数对象本身的引用
* arguments.callee.length:获取函数形参的个数
> Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"\[\]"引用每个实际传入的参数。
示例:
~~~
function say(a,b,c){
console.log(arguments.length); //2
console.log(arguments[0],arguments[1]); //hello world
}
say('hello','world');
~~~
## Function对象方法
**1、toString()**
* 功能:将函数体转换成对应的字符串。
# Boolean类型
常用方法:
**1、toString()**
* 功能:根据布尔值返回字符串 "true" 或 "false"。
> 注释:在 Boolean 对象被用于字符串环境中时,此方法会被自动调用。
**2、valueOf()**
* 功能:返回 Boolean 对象的原始值。
# Number类型
常用方法:
**1、toString()**
功能:将Number数值转换为字符串,该方法接受一个可选参数基数,若省略该参数,则默认基数为10,即十进制。
~~~
var num = 10;
console.log(num.toString(2)); //1010
~~~
**2、toLocaleString()**
功能:把一个 Number 对象转换为本地格式的字符串。
**3、valueOf()**
功能:返回一个 Number 对象的基本数字值。
> valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中。
# String类型
## String对象属性
**1、length**
功能:String 对象的 length 属性声明了该字符串中的字符数。
## String对象方法
**1、charAt()**
* 功能:返回指定位置的字符。
* 参数:必须,为目标字符的下标位置。
> 若参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。
**2、charCodeAt()**
* 功能:返回在指定的位置的字符的 Unicode 编码。
* 参数:必须,为目标字符的下标位置。
> 若参数 index 不在 0 与 string.length 之间,该方法将返回NaN。
**3、indexOf()**
* 功能:检索字符串,返回指定子字符串在字符串中首次出现的位置。
* 参数1:检索目标子字符串,必须。
* 参数2:在字符串中开始检索的位置,可选。其合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
> 注意:indexOf() 方法对大小写敏感!
> 注意:如果要检索的字符串值没有出现,则该方法返回 -1。
**4、lastIndexOf()**
* 功能:从后向前搜索字符串,返回指定子字符串在字符串中首次出现的位置。
* 参数1:检索目标子字符串,必须。
* 参数2:在字符串中开始检索的位置,可选。其合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符开始检索。
**5、match()**
* 功能:返回指定位置的字符。
* 参数:必须,规定要检索的字符串值或待匹配的 RegExp 对象。
* 返回值:存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
> 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
>
> 如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
示例:
~~~
var s = 'hello21 world21';
console.log(s.match(/\d{2}/)); //[ '21', index: 5, input: 'hello21 world21' ]
var s = 'hello21 world21';
console.log(s.match(/\d{2}/g)); //[ '21', '21' ]
~~~
**6、replace()**
* 功能:在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
* 参数1:regexp/substr,必须,规定子字符串或要匹配的 RegExp 对象。
* 参数2:replacement,必须,用于替换的字符串值。
* 返回值:替换后的一个新字符串。
示例:
~~~
var s = 'hello world hello';
console.log(s.replace('hello','hi')); //hi world hello
console.log(s.replace(/hello/,'hi')); //hi world hello
console.log(s.replace(/hello/g,'hi')); //hi world hi
~~~
> replace方法返回一个新字符串,并不会修改原字符串。
**7、search()**
* 功能:用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
* 参数:regexp/substr,必须,规定子字符串或要匹配的 RegExp 对象。
* 返回值:原字符串中第一次匹配到目标字符串的起始位置。
示例:
~~~
var s = 'hello world hello';
console.log(s.search('hello')); //0
console.log(s.search(/hello/g)); //0
console.log(s.search(/hello2/)); //-1
~~~
> search()方法不执行全局匹配,它将忽略标志 g。也就是说,它只匹配一次。若没匹配到结果,则返回-1。
**8、toLowerCase() & toUpperCase()**
* 功能:把字符串转换为小写/大写。
* 返回值:一个新的字符串。
示例:
~~~
var s = 'Hello World';
console.log(s.toLowerCase()); //hello world
console.log(s.toUpperCase()); //HELLO WORLD
~~~
**9、concat()**
* 功能:用于连接两个或多个字符串。
* 语法:stringObject.concat(stringX,stringX,...,stringX)
* 参数:
* 返回值:衔接后的一个新字符串。
> concat方法不会修改原字符串。
> stringObject.concat() 与 Array.concat() 很相似。
> 通常使用 " + " 运算符来进行字符串的连接运算通常会更简便一些。
示例:
~~~
var s1 = 'hello ';
var s2 = 'world ';
var s3 = '233';
console.log(s1.concat(s2,s3)); //hello world 233
~~~
**10、split()**
* 功能:用于把一个字符串分割成字符串数组,是 Array.join( ) 的逆操作。
* 参数1:separator,必须,字符串或正则表达式,从该参数指定的地方分割原字符串。
* 参数2:howmany,可选,指定返回数组的最大长度。
* 返回值:一个字符串数组。
示例:
~~~
var s = 'hi baby';
console.log(s.split('')); //[ 'h', 'i', ' ', 'b', 'a', 'b', 'y' ]
console.log(s.split(' ')); //[ 'hi', 'baby' ]
console.log(s.split('b')); //[ 'hi ', 'a', 'y' ]
~~~
**11、slice()**
* 功能:截取字符串的某个部分,并以新的字符串返回被提取的部分。
* 参数1:截取的起始位置,必须。
* 参数2:截取的结束位置,可选。
* 返回值:截取部分,一个新的字符串。
> 注意:String.slice() 与 Array.slice() 相似。
> slice方法的两个参数接受负值,若为负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。
> 若未指定第二个参数,则默认截取至字符串的末尾。
> slice方法不修改原字符串。
示例:
~~~
var s = 'hi baby';
console.log(s.slice(3)); //baby
console.log(s.slice(1,5)); //i ba
console.log(s.slice(-4)); //baby
console.log(s.slice(-4,-2)); //ba
~~~
**12、substr()**
* 功能:截取从指定下标开始的指定数目的字符。
* 参数1:start,必须,截取的起始位置,接受负值。
* 参数2:length,可选,截取字符串的长度,若未指定,则默认截取到原字符串的末尾。
* 返回值:截取部分,一个新的字符串。
> 注意:ECMAscript 没有对该方法进行标准化,因此不建议使用它。
示例:
~~~
var s = 'hi baby';
console.log(s.substr(3)); //baby
console.log(s.substr(3,2)); //ba
console.log(s.substr(-3,2)); //ab
~~~
**13、substring()**
* 功能:截取字符串中介于两个指定下标之间的字符。
* 参数1:start,必须,截取的起始位置。
* 参数2:end,可选,截取的结束位置,若未指定,则默认截取到原字符串的末尾。
* 返回值:截取部分,一个新的字符串。
示例:
~~~
var s = 'hi baby';
console.log(s.substring(3)); //baby
console.log(s.substring(3,5)); //ba
console.log(s.substring(5,3)); //ba
console.log(s.substring(3,3)); //''
~~~
> 注意:与 slice() 和 substr() 方法不同的是,substring() 不接受负的参数。
> 如果参数 start 与 stop 相等,那么该方法返回的一个空串。
> 如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。
# Global对象(全局对象)
> 关于全局对象:全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。
## 属性
**Infinity**
代表正的无穷大的数值。
示例:
~~~
console.log(6/0); //Infinity
console.log(-6/0); //-Infinity
console.log(0/0); //NaN
console.log(1.7976931348623157E+10308); //Infinity
console.log(-1.7976931348623157E+10308); //-Infinity
~~~
> Infinity代表了超出JavaScript处理范围的数值。也就是说JS无法处理的数值都是Infinity。实践证明,JS所能处理的最大值是1.7976931348623157e+308,而最小值是5e-324。
**NaN**
代表非数字的值。
示例:
~~~
var a = Number('100');
var b = Number('hello world');
console.log(a); //100
console.log(b); //NaN
console.log(isNaN(a)); //false
console.log(isNaN(b)); //true
~~~
> 提示:请使用 isNaN() 方法来判断一个值是否是数字,原因是 NaN 与所有值都不相等,包括它自己。
**Undefined**
代表未定义的值。
示例:
~~~
var a;
var b = '';
var c = null;
console.log(a === undefined); //true
console.log(b === undefined); //false
console.log(c == undefined); //true
~~~
> 提示:判断一个变量是否未定义,只能用 === undefined 运算来测试,因为 == 运算符会认为 undefined 值等价于 null,即undefined == null会返回true。
>
> 注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
## 方法
**1、encodeURI(URIString)**
功能:将字符串作为URI进行编码,返回值为URIstring 的副本。
参数:
* URIString(必须):一个待编码的字符串。
示例:
~~~
console.log(encodeURI('http://www.baidu.com')); //http://www.baidu.com
console.log(encodeURI('http://www.baidu.com/my mind')); //http://www.baidu.com/my%20mind
console.log(encodeURI(',/?:@&=+$#')); //,/?:@&=+$#
~~~
> 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - \_ . ! ~ \* ' ( ) 。
>
> 该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
>
> 提示:如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。
**2、encodeURIComponent(URIString)**
功能:将字符串作为URI组件进行编码,返回值为URIstring的副本。
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - \_ . ! ~ \* ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
参数:
* URIString(必须):一个待编码的字符串。
示例:
> encodeURI和encodeURIComponent的区别:
>
> 它们都是编码URL,唯一区别就是编码的字符范围,其中encodeURI方法不会对下列字符编码 ASCII字母、数字、~!@#$&\*()=:/,;?+'
> encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!\*()'
> 所以encodeURIComponent比encodeURI编码的范围更大。
> 实际例子来说,encodeURIComponent会把http://编码成 http%3A%2F%2F 而encodeURI却不会。
使用场景:
* 当你需要编码整个URL,然后使用这个URL,则使用encodeURI。
~~~
console.log(encodeURI('http://www.baidu.com/home/some other thing'));
//编码后为:http://www.baidu.com/home/some%20other%20thing; 其中,空格被编码成了%20
//但是如果你用了encodeURIComponent
console.log(encodeURIComponent('http://www.baidu.com/home/some other thing'));
//http%3A%2F%2Fwww.baidu.com%2Fhome%2Fsome%20other%20thing 连 "/" 都被编码了,整个URL已经没法用了
~~~
* 当你需要编码URL中的参数时,那么使用encodeURIComponent。
~~~
var param = "http://www.baidu.com/home/"; //param为参数
param = encodeURIComponent(param);
var url = "http://www.baidu.com?next=" + param;
console.log(url) //'http://www.baidu.com?next=http%3A%2F%2Fwww.baidu.com%2Fhome%2F'
//显然,参数中的 "/" 被编码了,而如果用encodeURI肯定要出问题,因为后面的/是需要编码的。
~~~
补充:相应的,存在decodeURI()和decodeURIComponent是用来解码的,逆向操作。
**3、parseInt(string,radix)**
功能:解析一个字符串,并返回一个整数。
参数:
* string(必须):待解析的字符串
* radix(可选):表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
示例:
~~~
console.log(parseInt('10')); //10
console.log(parseInt('11',9)); //10 (9+1)
console.log(parseInt('11',2)); //3 (2+1)
console.log(parseInt('17',8)); //15 (8+7)
console.log(parseInt('1f',16)); //31 (16+15)
console.log(parseInt('010')); //10
console.log(parseInt('0x0011')); //17
~~~
**4、parseFloat()**
功能:解析一个字符串,并返回一个浮点数。
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止。
参数:
* string(必须):待解析的字符串
示例:
~~~
console.log(parseFloat('10')); //10
console.log(parseFloat('10.00')); //10
console.log(parseFloat('10.33')); //10.33
console.log(parseFloat(' 60 ')); //60 首尾的空格会忽略
console.log(parseFloat('23 34 45')); //23 中间的空格不会忽略,会中断
console.log(parseFloat('23 years')); //23
console.log(parseFloat('i am 23')); //NaN
~~~
> 提示:开头和结尾的空格是允许的。如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。如果只想解析数字的整数部分,请使用 parseInt() 方法。
**5、isFinite(number)**
功能:用于检查其参数是否是无穷大。
参数:
* number(必须):待检测数字。
如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。
示例:
~~~
console.log(isFinite(123)); //true
console.log(isFinite(-1.23)); //true
console.log(isFinite(5-2)); //true
console.log(isFinite(0)); //true
console.log(isFinite(0/0)); //false
console.log(isFinite('Hello')); //false
~~~
**6、isNaN(number)**
功能:用于检查其参数是否为非数字值。
参数:
* number(必须):待检测数字。
如果 number 是非数字值 NaN(或者能被转换成NaN),返回 true,否则返回 false。
示例:
~~~
console.log(isNaN(123)); //false
console.log(isNaN(-1.23)); //false
console.log(isNaN(5-2)); //false
console.log(isNaN(0)); //false
console.log(isNaN(0/0)); //true
console.log(isNaN('Hello')); //true
~~~
> 提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
**7、Number(object)**
功能:把对象的值转换为数字。
参数:
* object(必须):待转换的对象。
如果参数是 Date 对象,Number() 返回从1970年1月1日至今的毫秒数,即时间戳。如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
示例:
~~~
console.log(Number(new Boolean(true))); //1
console.log(Number(new Boolean(false))); //0
console.log(Number(new Date())); //1506266494726
console.log(Number(new String('999'))); //999
console.log(Number(new String('999 888'))); //NaN
~~~
**8、String(object)**
功能:把对象的值转换为字符串。
参数:
* object(必须):待转换的对象。
示例:
~~~
console.log(String(new Boolean(true))); //'true'
console.log(String(new Boolean(false))); //'false'
console.log(String(new Date())); //'Sun Sep 24 2017 23:25:43 GMT+0800 (CST)'
console.log(String(new String('999'))); //'999'
console.log(String(new String('999 888'))); //'999 888'
console.log(String(12345)); //'12345'
~~~
# Math对象
常用方法:
~~~
Math.abs(); //取绝对值
Math.ceil(); //向上取整
Math.floor(); //向下取整
Math.round(); //四舍五入取整
Math.random(); //生成0~1间的随机数(>0)
Math.max(x,y); //取x、y中较大的那个
Math.min(x,y); //取x、y中较小的那个
~~~
# JSON对象
我们常说的对象字面量其实不是JSON对象,但是有真正的JSON对象。
两者完全不一样概念,在新版的浏览器里JSON对象已经被原生的内置对象了,目前有2个静态方法:JSON.parse用来将JSON字符串反序列化成对象,JSON.stringify用来将对象序列化成JSON字符串。
老版本的浏览器不支持这个对象,但你可以通过json2.js来实现同样的功能。
## JSON对象方法
**1、JSON.parse()**
* 功能:将字符串反序列化成对象
* 参数:JSON字符串
* 返回值:对象
示例:
~~~
var jsonString = '{"name":"ryan"}'; //JSON字符串(比如从AJAX获取字符串信息)
var obj = JSON.parse(jsonString); //将字符串反序列化成对象
console.log(obj); //{ name: 'ryan' }
console.log(obj.name == 'ryan'); //true
~~~
**2、JSON.stringify()**
* 功能:将一个对象解析为JSON字符串
* 参数:对象
* 返回值:JSON字符串
示例:
~~~
var obj = {name:'ryan',age:23};
var jsonString = JSON.stringify(obj);
console.log(jsonString); //'{"name":"ryan","age":23}'
~~~
- 空白目录
- 常用功能
- PHP中常用的header头部定义
- 压缩包下载1
- 压缩包下载2
- 文件下载
- php常用加密函数总结
- url请求参数加解密
- PHP操作大全
- 指定月份的第某个月
- PHP 数组和字符串互相转换实现方法
- php字符串截取的简单方法
- php 根据子分类循环获取其父级分类
- PHP文件操作功能函数大全
- PHP常用到的功能函数
- 自定义php常用函数110个
- 自定义PHP常用功能函数
- 开发中常用自定义小功能函数
- PHP判断远程文件是否存在
- PHP写文件函数
- PHP生成GUID的函数
- PHP常用正则表达式汇总
- php字符串压缩
- PHP无限分组
- PHP简单 对象(object) 与 数组(array) 的转换
- PHP数组常用函数
- PHP调式测试函数
- PHP常用字符串的操作函数
- mysql 常用内置函数
- PHP通用请求函数CURL封装
- 裁剪图片PHP代码
- PDO操作MYSQL封装类
- 10个实用的PHP代码片段
- 获取访问者IP地址
- PHP实现发红包程序
- PHP把文本转换成图片
- curl重写php file_get_contents
- PHP生成一个随机字符串
- PHP读文件和写文件
- PHP根据key 给二维数组分组
- php中curl模拟post提交多维数组
- 33个超级有用必须要收藏的PHP代码样例
- PHP防XSS 防SQL注入的代码
- php常用数组array函数实例总结
- 用PHP遍历目录下的全部文件
- GBK2UTF8
- php函数类库
- 一、php一些常用的校验
- 1.1、校验是否为空(null/空串)1
- 1.2、校验是否为纯数字1
- 1.3、校验是否为纯数字(正则)1
- 1.4、检验手机号1
- 1.5、校验邮箱格式1
- 1.6、检查密码长度是否符合规定1
- 二、手机类型访问判断
- 三、字符集文件转换
- 3.1、utf8转gbk
- 3.2、gbk转utf8
- 3.3、繁体转简体
- 3.4、简体转繁体
- 3.5、unicode转utf8
- 3.6、utf8转unicode
- 3.7、Ascii转拼音
- 3.8、gbk转拼音
- 3.9、数组 utf8转gbk
- 3.10、数组 gbk转utf8
- 3.11、json 处理gbk转码utf-8问题( json_encode转换数组,值为null)
- 3.12、Unicode解码
- 四、文档目录操作
- 4.1、转化 \ 为 /
- 4.2、创建目录
- 4.3、拷贝目录及下面所有文件
- 4.4、转换目录下面的所有文件编码格式
- 4.5、列出目录下所有文件
- 4.6、设置目录下面的所有文件的访问和修改时间
- 4.7、目录列表
- 4.8、删除目录及目录下面的所有文件
- 4.9、取得文件扩展
- 4.10、查询字符是否存在于某字符串
- 4.11、获取文件目录列表
- 4.12、删除一个路径下的所有文件夹和文件的方法
- 4.13、文件下载
- 五、session与cookie
- 5.1、设置session
- 5.2、读取session
- 5.3、清除session
- 六、CURL操作
- 6.1、发起get请求
- 6.2、发起post请求
- 6.3、curl获取跳转后的网址的url
- 6.4、curl判断远程图片是否加防盗链
- 6.5、curl获取301页面的内容
- 6.6、curl判断文件是否存在(404)
- 6.7、php的curl封装类
- 七、日期、时间与字节转换
- 7.1、转换字节数为其他单位(Gb、Mb等)
- 7.2、时间转换(将秒转换为时间)
- 7.3、将秒转换成 天-时分秒
- 7.4、时间转换(将时分秒转换为秒)
- 7.5、计算两个时间相差的天
- 7.6、获取文件大小并格式化
- 7.7、返回13位时间戳
- 7.8、返回与当前时间的差距,如1分钟前,2小时前,5月前等
- 7.8、PHP中DateTime的常用方法
- 八、对象、数组、字符串、转义等
- 8.1、将数组转换为对象
- 8.2、将对象转换为数组
- 8.3、将字符串转换为数组
- 8.4、将数组转换为字符串
- 8.5、将文本格式成适合js输出的字符串
- 8.6、返回经addslashes(转义)处理过的字符串或数组
- 8.7、返回经stripslashes(删除反斜杠)处理过的字符串或数组
- 8.8、返回经htmlspecialchars(字符转html)处理过的字符串或数组
- 8.9、安全过滤函数
- 8.10、xss过滤函数
- 8.11、过滤ASCII码从0-28的控制字符
- 8.12、格式化文本域内容
- 8.13、将文本格式成适合js输出的字符串
- 8.14、转义 javascript 代码标记
- 8.15、数组转码
- 8.16、php用逗号格式化数字
- 8.17、数组去重
- 8.18、字符串去重
- 8.19、数组排序
- 九、加密扩展
- 9.1、简单的字符串加密、解密函数
- 9.2、简单的加密解密类
- 9.3、简单对称加密算法2
- 9.4、常用对称加密算法(DES/AES)类
- 9.5、3des加密解密类-三重数据加密算法
- 十、随机数、获取请求ip等
- 10.1、产生随机字符串
- 10.2、获取请求ip
- 10.3、生成一定范围内的随机数字
- 10.4、生成不重复的随机数
- 10.5、生成一定数量的随机数,并且不重复
- 10.6、生成32位随机数
- 10.7、生成9位随机数字(可以做qq用)
- 十一、其他
- 11.1、php对html页面压缩函数
- 11.2、构建层级(树状)数组、
- 11.3、获取内容中的图片
- 11.4、生成sql语句,如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
- 11.5、打印各种类型的数据,调试程序时使用。
- 11.6、URL重定向
- 11.7、替换html代码里的所有图片的url,新增url
- 11.8、去除html里的p标签
- 11.9、去除字符串中所有html代码(格式化代码html)
- 11.10、将number_format的输出转换为php数字
- 11.7、内容里批量替换图片的url地址为自己的地址
- 十二、类库
- 1、php 5.6.3PHP封装的数据库模型Model类完整示例【基于PDO】
- 2、Curl类库
- 3、php PDO数据库类库
- 4、获取网站title
- 字符串配置转数组
- 数组助手类1
- 获取随机字符串
- 获取头像存储路径
- 单位转换函数
- 获取字符串长度
- 获取中文字符拼音首字母
- 获取当前页面URL地址
- 获取n天前的时间戳
- 获取n天前0点的时间戳
- 获取ip地址所在的区域
- 邮箱验证
- PHP常用函数总结(160多个)
- PHP判断输入数据是否合法常用的类
- 无限极分类
- php ajax实现分页功能
- 代码
- html
- sendAjax.js
- data.js
- page.js
- page.css
- php基础
- 字符串
- 字符串1
- 字符串常用函数
- 数组
- 数组简介
- 数组的定义
- 数组的操作
- 1 数组的计算
- 2 for循环遍历索引数组
- 3 foreach遍历关联数组
- 4 list、each函数遍历数组
- 5 常用操作数组函数
- 数组的常用函数
- 时间
- PHP的日期和时间
- 1 获取时期时间信息函数
- 2 日期验证函数
- 3 获取本地化时间戳函数
- 4 程序执行时间检测
- 文件操作
- 文件处理系统
- 1 读取文件
- 2 创建和修改文件内容
- 3 创建临时文件
- 4 移动、拷贝和删除文件
- 5 检测文件属性函数
- 6 文件常用函数和常量
- 7 文件锁处机制
- 8 目录处理函数
- 9 文件权限设置
- 10文件路径函数
- 11 小小文件留言本
- 12 修改配置文件的实例
- 流程控制
- 流程控制结构
- if条件结构流程
- 1 if语句
- 2 嵌套if...else...elseif结构
- 3 if语句多种嵌套
- 分支结构switch语句的使用
- 循环语句的使用
- 1 while循环
- 2 do...while循环的区别
- 3 for循环控制语句
- 4 goto语法
- 5 declare 语法
- 函数
- PHP函数
- 自定义函数
- 自定义函数高级调用
- 1 回调函数
- 2 变量函数
- 3 匿名函数
- 4 内部函数
- 5 变量作用域
- 6 参数的引用
- 7 递归函数
- 8 静态变量
- 使用系统内置函数
- 文件包含函数
- 数学常用函数
- 正则
- PHP正则表达式
- 1 正则表达示的定界符
- 2 正则表达示中的原子
- 3 正则表示中的元字符
- 4 正则达达示中的模式修正符
- 5 写正则的诀窍和常用正则
- 6 用正则写一个UBB文本编辑器
- 常用正则
- 错误处理
- 1 禁止显示错误
- 2 错误报告级别
- 3 错误记录日志
- 4 自定义错误处理函数
- 错误及异常处理机制、错误日志
- 过滤器
- 表达式
- PHP基本语法
- PHP基本语法(一)
- PHP基本语法(二)
- GD库图像处理
- 文件上传和下载
- PHP文件上传
- 1 文件上传需要注意php.ini文件
- 2 文件上传的步骤
- 3 文件上传表单注意事项
- 4 按照数组和步骤完成文件上传
- 5 多文件上传
- 6 文件上传进度处理
- PHP图像处理
- 1 学习前的准备工作
- 2 用图片处理函数画一张图
- 3 生成验证码
- 4 图像缩放和裁剪技术
- 5 图片水印处理
- 常量和变量
- 1 用常量限制用户跳过某些文件
- .2 可变变量
- 3 外部变量
- 4 环境变量
- 5 变量引用
- PHP表达式与运算符
- 1 算术运算
- 2 赋值运算
- 3 自加、自减运算
- 4 比较运算
- 5 逻辑运算
- 6 位运算
- 7 运算符优先级
- 8 三元运算符和其它运算符
- 会话管理和控制
- 1 Cookie概述
- 2PHP中的Cookie
- 3 session概述
- 4 PHP中使用session
- 5 SESSION应用实例
- 会话技术(cookie session)
- 会话技术 session场景使用介绍!
- PHP.in中session和cookie的配置说明
- 通过cURL来做小偷程序
- 1 curl的使用步骤
- 2 自定义get方法抓取网页
- 3 使用post发送数据
- PHP基础数据类型及运算符介绍
- 数据类型
- 1 整型就是整数
- 2 布尔就是易经的知识
- 3 字符串
- 4 浮点型
- 5 重要:if和else语法
- 6 NULL类型
- 7对象以后会学
- 8 数组会有单纯的一个章节
- 9 资源类型
- 10 眼前了解回调类型即可
- 11 查看和判断数据类型
- 12 数据类型的自动转换和强制转换
- PHP版本
- php自动加载
- xml的介绍
- openssl的介绍
- php文件管理
- 数据库Mysql
- 数据库之MySQL(概述)
- PHP数据库编程
- 数据库编程(2)
- SQL常见的可优化点
- Mysql设计与优化专题
- mysql的最佳索引攻略
- 详解慢查询
- ER图,数据建模与数据字典
- 数据中设计中的范式与反范式
- 字段类型与合理的选择字段类型
- 表的垂直拆分和水平拆分
- 21分钟 MySQL 入门教程
- 一、MySQL的相关概念介绍
- 二、Windows下MySQL的配置
- 三、MySQL脚本的基本组成
- 四、MySQL中的数据类型
- 五、使用MySQL数据库
- 六、操作MySQL数据库
- 七、创建后的修改
- 八、附录
- 3天入门MySQL
- 前言1
- 01. 数据库的用途和概念
- 02. 娱乐化讲解表关系
- 03. mysql 数据库安装
- 04. 数据语句操作类型
- 05. 连接数据库
- 06. 数据库结构定义语句
- 6.2 数据表操作
- 6.1 数据库操作
- 6.3 数据字段操作
- 07. 类型、字符集、引擎和索引
- 7.1 数据类型
- 7.2 字符集
- 7.3 表引擎
- 7.4 索引
- 08. 增删改查
- 12.8.1 插入记录
- 12.8.2 查询记录
- 12.8.3 多表联合查询
- 12.8.4 更新记录
- 12.8.5 删除记录
- 09. DCL语句
- 10. 常用工具简介
- 附录1 . 学习MySQL常用的英文单词
- MySQL 超新手入门
- (1) 重新开始
- (2) 数据库概论和 MySQL 安装
- (3) SELECT 基础查询
- (4) 运算式和函数
- (5) JOIN 和 UNION 查询
- (6) CRUD 和资料维护
- (7) 字符集和数据库
- (8) 存储引擎和数据类型
- (9) 表格和索引
- (10) 子查询
- (11) 视图
- (12) 预处理语句
- (13) 存储过程入门
- (14) 存储过程的变量和流程
- (15) 存储过程进阶
- (16) 触发器
- (17) 资料库资讯
- (18) 错误处理和查询
- (19) 导入和导出数据
- (20) 性能
- php常用类
- 面向对象
- 面向对象(OOP)编程完全教程
- 1.什么是面向对象
- 2.什么是类,什么是对象,类和对象这间的关系
- 3.什么是面向对象编程呢
- 4.如何抽象出一个类
- 5.如何实例化对象
- 6.如何去使用对象中的成员
- 7.特殊的引用this的使用
- 8.构造方法__construct()与析构方法__destruct()
- 9.封装性(var与public,protected,private的关系)
- 10.__set(),__get(),__isset(),__unset()四个方法的应用
- 11.类的继承
- 12.重载新的方法(parent::)
- 13.访问类型(public,protected,private)
- 14.final关键字的应用
- 15.static和const关键字的使用(self::)
- 16.__toString()方法
- 17.克隆对象__clone()方法
- 18.__call()处理调用错误
- 19.抽象方法和抽象类(abstract)
- 20.PHP5接口技术(interface)
- 21.多态的应用
- 22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自动加载类 __autoload()函数
- PHPer进阶
- 单例模式
- 工厂方法模式
- 适配器模式
- 建造者模式(通过选择mysql,mongo数据库链接类型做说明)
- 委托模式
- 对象基础实践
- 深入了解面向对象高级特性
- 抽象类和接口类的实际作用
- PHP解决问题进化论(整理笔记)
- PHP7新特性整理介绍篇
- php-fpm 与 Nginx优化总结
- Centos+Nginx+PHP7.0编译安装(和PHP5.6老版本共存)
- PHP7:Mongodb API使用
- PHP之include/require深入了解
- PHP内核了解:生命周期及运行模式
- 面向对象总结
- 基础概念
- 什么是类
- 什么是对象
- 静态属性
- 三大特征
- 封装
- 继承
- 多态
- 9个常用的魔术方法
- __construct
- __destruct
- __call
- __get
- __set
- __sleep
- __toString
- __clone
- __autoload
- 抽象类
- 对象接口
- 面向对象设计模式
- 前言
- (一),单例模式
- (二),Builder模式
- (三),原型模式
- (四),工厂方法模式
- (五),策略模式
- (六),状态模式
- (七),观察者模式
- (八),责任链模式
- (九),适配器模式
- (十),代理模式
- (十一),装饰模式
- (十二),外观模式
- (十三),解释器模式
- PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
- 面向对象1
- 类和对象
- 面向对象高级
- php编程总结
- PHP学习笔记
- MySQL学习笔记
- php基础知识
- javascript
- javascript DOM总结
- JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)
- JavaScript (JS) 面向对象编程 浅析 (含对象、函数原型链、闭包解析)
- JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)
- JavaScript (JS)基础:DOM 浅析 (含数组Array、字符串String基本方法解析)
- JavaScript (JS)基础:ECMAScript 浅析 (含Math基本方法解析)
- js功能函数
- 一、js一些常用的校验
- 1.1、校验是否为空(null/空串)
- 1.2、校验是否为纯数字
- 1.3、校验是否为纯数字(正则)
- 1.4、检验手机号
- 1.5、验证座机号
- 1.6、校验ip
- 1.7、检验url地址
- 1.8、检验身份证
- 1.9、检验邮箱
- 1.10、检验日期
- 1.11、检验金额
- 1.12、检验否是汉字
- 1.13、校验数字的表达式
- 1.14、校验字符的表达式
- 1.15、特殊需求表达式
- 1.16、检测密码强度
- 二、手机类型判断
- 三、返回字符串长度,汉子计数为2
- 四、获取url中的参数
- 五、js 绑定事件 适用于任何浏览器的元素绑定
- 六、获得当前浏览器JS的版本
- 七、获取当前点击事件的Object对象
- 八、字符串截取方法
- 九、JS 弹出新窗口全屏
- 十、全选/全不选
- 十一、js 判断浏览器
- 十二、JS判断两个日期大小
- 十三、移除事件
- 十四、回车提交
- 十五、JS 执行计时器
- 十六、JS 写Cookie
- 十七、JS 读Cookie
- 十八、Ajax 请求
- 十九、JS StringBuilder 用法
- 二十、JS 加载到顶部LoadJS
- 二十一、清空 LoadJS 加载到顶部的js引用
- 二十二、JS 替换非法字符
- 二十三、按Ctrl + Entert 直接提交表单
- 二十四、获取当前时间
- 二十五、Js 去掉空格方法
- 二十六、js 动态移除 head 里的 js 引用
- 二十七、整个URL 点击事件 加在URL里的onclick里
- 二十八、判断浏览器使用的是哪个 JS 版本
- 二十九、加入收藏夹
- 三十、动态加载 CSS 样式文件
- 三十一、返回脚本内容
- 三十二、清除脚本内容
- 三十三、返回按ID检索的元素对象
- 三十四、显示元素 待验证
- 三十五、与insertBefore方法(已存在)对应的insertAfter方法
- 三十六、光标停在文字的后面,文本框获得焦点时调用
- 三十七、检验URL链接是否有效
- 三十八、格式化CSS样式代码
- 三十九、压缩CSS样式代码
- 四十、 获取当前路径
- 四十一、ip 转 整型
- 四十二、整型解析为IP地址
- 四十三、删除cookies
- 四十四、判断是否以某个字符串结束
- 四十五、判断是否以某个字符串开头
- 四十六、根据样式名称检索元素对象
- 四十七、 获取移动设备初始化大小
- 四十八、 获取移动设备最大化大小
- 四十九、获取移动设备屏幕宽度
- 五十、获取页面scrollLeft
- 六十、获取页面宽度
- 六十一、获取页面scrollTop
- 六十二、获取页面可视高度
- 六十三、判断数组元素是否重复
- 六十四、生成随机数
- 六十五、数组去重
- 六十六、深度拷贝对象
- 六十七、全部替换replaceAll
- 六十八、阻止冒泡
- 六十九、返回顶部
- 七十、jsonp跨域请求
- 七十一、到某一个时间的倒计时
- 七十二、清除对象中值为空的属性
- 七十三、获取文件后缀名的方法
- 七十四、判断一个对象是不是数组类型
- 七十五、冒泡排序
- 七十六、实现一个最简单的模板引擎
- 七十七、数组最大值最小值
- 七十八、数组求和,平均值
- 七十九、从数组中随机获取元素
- 八十、返回对应元素在数组中的下标
- 八十一、返回数组(字符串)一个元素出现的次数
- 八十二、得到n1-n2下标的数组,即返回数组下标arr[n1]到数组arr[n2]的值
- 八十三、筛选数组,这里所做的就只是删除相应的数组
- 八十四、去除字符串空格
- 八十五、字母大小写切换
- 八十六、字符串循环复制,前面的要循环的字符串,后面的要循环的次数
- 八十七、字符串替换,这里的要替换的字符串必须是连续的
- 八十九、将时间戳转换成日期格式
- 九十、检验字符串是否超过某个值,超出出现省略号
- 九十一、随机码,这里的参数count必须是 2 ~ 36 之间的整数
- 九十二、查找字符串中某字符出现的次数
- 九十三、JS插入排序
- 九十四、获取前num天的日期
- 九十五、js实时计算rem,宽度大于1920px时1rem=100px
- 九十六、原生JS获取鼠标XY轴的值
- 九十七、转成XML对象
- 九十八、Js身份证验证函数
- 九十九、格式化数字串
- 一百、原生Ajax 请求
- 一百零一、两条直角边算角度
- 一百零二、禁止readonly和disabled的input退格键返回上一页
- 一百零三、生成随机字母字符串
- 一百零四、float偏移处理
- 一百零五、根据月份获取起止时间戳
- 一百零六、工具函数对象书写例子,可自己扩展
- 一百零七、js字符串压缩算法与解压
- 一百零八、指定数组元素排序(正序倒序)
- 一百零九、js所有的内置方法
- JavaScript 常用函数总结
- js常用函数整理
- JavaScript基础
- javaScript基础&DOM(一)
- javaScript基础&DOM(二)
- JavaScript语法基础1
- javascript数组对象
- javascript字符串函数
- jquery、javascript实现(get、post两种方式)跨域解决方法
- php MVC原理
- php基础知识(语法与原理)
- PHP编程经验
- 第一章 代码风格
- 第二章 代码注释
- 第三章 目录结构
- 第四章 文件管理
- 第五章 代码整理
- 第六章 路径和路由
- 第七章 实用表格
- 第八章 实用开发软件
- 第九章 技术提升心得
- 第十章 实用插件搭配
- 第十一章 常用设计模式
- PHP编码规范文档
- PHP加快执行效率的写法规范
- VUE避坑指南
- 从零开始学Vue
- Vue-cli
- PHP工具类
- 数组助手类
- 通用助手类
- 时间助手类
- 图像
- 拼音助手类
- 字符串助手类
- 验证助手类
- 时间类封装
- 数据库链式调用封装
- curl 封装 / 发送文件 / 远程下载到服务器
- php Captcha 驗證碼類
- php 替换敏感字符串
- php返回数据格式化类
- php XML文件解释类
- php CSS Update Class
- PHPMailer - PHP email transport class
- PHP 遍历文件夹及文件类及处理类
- 自动登入google play下载app report
- php click captcha 验证码类
- php 获取页面中的指定内容类
- php 支持断点续传的文件下载类
- php 缩略图生成类,支持imagemagick及gd库两种处理
- php 根据url自动生成缩略图
- php 过滤html标记属性类
- php HTTP请求类,支持GET,POST,Multipart/form-data
- php Cookies 操作类
- php 密码生成类
- php main 与 iframe 相互通讯类(同域/跨域)
- php 根据url自动生成缩略图,并处理高并发问题
- php Timer 页面运行时间监测类
- php 双向队列类
- php 导出CSV抽象类
- php zip文件内容比较类
- php 获取/设置用户访问页面语言类
- php 获取Youtube某个User所有Video信息
- php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换
- php 版本处理类
- TP5
- 验证器
- 内置规则
- tp5数据库操作
- 数据添加或更新
- 静态增删改查 / 关联操作
- 日志操作
- 路由
- taglib-自制标签
- migrations 数据库迁移
- TP3.2
- 数据库操作
- 发送邮箱
- Tp6
- Redis
- 字符串 / 列表 / Hash / Set / Zet / 基数统计算法
- 队列 /订阅发布 php实例
- 事务 / bitmap 位图 / 地理位置
- 备份与恢复 / 性能测试
- 设置密码 / 模糊查询
- 性能优化
- php+redis实现高并发模拟下单、秒杀、抢购操作
- Redis 的简单介绍
- Redis 最常见的问题
- 扩展thinkphp5的redis类方法
- php for redis
- 前言11
- 字符串11
- 集合
- 有序集合
- 列表
- 哈希
- key操作
- Redis 基础教程
- 简介
- 递增
- 过期
- 列表1
- 集合1
- 可排序集合
- 哈希表
- Redis学习文档
- 序言
- 简介1
- Window 下安装
- 执行
- Linux 下安装
- 数据类型1
- String
- Hash
- List
- Set
- zset
- 区别和详解
- 命令
- Keys
- flushall
- del
- ping
- 设置密码
- 实例
- PHP+Redis 实例【一】点赞 + 热度
- Thinkphp+Redis
- 数据队列
- 字符串111
- 列表11
- 集合11
- 哈希1
- 有序集合1
- 添加redis函数助手
- 基础知识
- Redis的7个应用场景
- 深入解析Redis中常见的应用场景
- MongoDB和Redis的区别
- 相关书籍
- 函数整理
- redis知识总结
- redis学习文档
- 常用命令
- 运维常用命令
- 通用操作相关命令
- 字符串相关命令
- 链表list相关命令
- 集合set相关命令
- 有序集合相关指令
- 哈希hash
- 事务
- 订阅和发布
- rdb快照持久化
- aof日志持久化
- redis集群 主从配置
- sentinel监视
- key的设计
- Redis实践技巧
- 前言111
- 第1章 keys键操作
- 第2章 string类型
- 第3章 list类型
- 第4章 set类型
- 第5章 sort set排序类型
- 第6章 hash类型
- 第7章 redis备份
- 第8章 主从复制
- 第9章 设置密码
- 第10章 事务
- 第11章 php操作redis
- Redis常见7种使用场景(PHP实战)
- redis
- jQuery学习总结
- jquery总结2
- Git
- php微信接口开发
- php微信接口开发(卷一)
- 开发心得
- 申请微信测试号
- 打通服务器与微信之间的通信
- 接受微信发送的信息
- 回复微信发送的信息
- 微信回复单图文消息
- 微信回复多图文消息
- curl用法小测试
- 获取access_token
- 获取微信的media_id
- 微信回复图片消息
- 关注自动回复
- 微信生成自定义菜单
- 【实战】后台管理自定义菜单
- 1.页面数据提交并展示
- 2.组装一、二级菜单
- 3.完成简略自定义菜单
- 【实战】thinkphp框架开发微信接口
- 1.相关东西下载地址
- 2.配置thinkphp3.2.3
- 3.微信回复文本消息
- 4.微信获取个人基本信息
- php微信接口开发(卷二)
- 网页授权获取用户基本信息
- 1.输出回调地址
- 2.获取用户信息页面
- 3.数据写入数据库
- 用户分组接口的使用
- 1.对上节代码的优化处理
- 2.获取所有用户组
- 3.创建一个分组
- 4.查询指定用户的分组
- 群发消息的接口的使用
- 1.创建新控制器
- 2.预览群发消息接口
- 3.群发消息
- 生成带参数的二维码
- 长连接转短连接
- 微信js-SDK的引入
- 1.获取jsapi_ticket
- 2.判断当前客户端版本是否支持指定JS接口
- 图像接口的使用
- 扫一扫二维码接口
- php微信接口开发(卷三)
- 微信公众号
- 1.前提条件
- 2.微信公众平台需要做的设置
- 微信支付商户平台
- 1.操作证书
- 2.配置密钥
- 3.配置支付授权目录
- 公众号支付(Jsapi支付)
- 1.SDK与demo下载
- 2.测试DEMO
- 3.将支付接口更为真实公众号信息
- 微信商城
- 1.tp3+bootstrap使用实战
- 2.图片上传实战
- 3.商城后台实战
- 4.购买商城实战
- 5.下订单后使用微信支付
- 小程序基础
- 简介12
- 接入指南
- 开发者工具的使用
- 代码审核与发布
- 小程序申请微信认证
- 小程序申请微信支付
- 小程序绑定微信开放平台帐号
- app.json配置
- 配置demo
- pages
- window
- tabBar
- networkTimeout
- debug
- page.json
- API
- 发起网络请求
- 网络请求提交表单
- 引入
- WeUI
