css
font-variant
属性:normal(默认)
转换大小写
text-transform属性:
none capitalize lowercase uppercase
水平的 horizontal
垂直的 Vertical
unshift就是区别于shift,他是从后面推出,而不是从前面计算后推出
reverse方法由于使用不方便所以才衍生出sort方法,而sort方法则思通过toString()转型方法去将字符转为ascll码进行比较,把最大放最后面,最小的则放在最前面。
concat() 方法可以基于当前数组中的所有项创建一个新数组,他会将非数组项添加到已创建好的项目后面,并按照顺序排列。
例子:
1 | var colors = ["red","green","blue"]; |
2 | |
3 | var colors=colors.concat("yellow",["black","brown"],"white"); |
slice() 方法可以接受一或两个参数,即要返回项的起始和结束位置。
splice插入的第二个参数为0,替换的第二个参数为1
总结:插入原理应该也是替换,他就是将空的值提取存入到这个定义中,再把空出来的空间替换成定义的量。
例子:
1 | var colors = ["red", "green", "blue"]; |
2 | var removed = colors.splice(0,1); |
3 | // 删除第一项 |
4 | alert(colors); |
5 | // green,blue |
6 | alert(removed); |
7 | // red,返回的数组中只包含一项 |
8 | |
9 | removed = colors.splice(1, 0, "yellow", "orange"); |
10 | alert(colors); |
11 | // green,yellow,orange,blue |
12 | alert(removed); |
13 | // 返回的是一个空数组 // 从位置 1 开始插入两项 |
14 | removed = colors.splice(1, 1, "red", "purple"); |
15 | alert(colors); |
16 | // green,red,purple,orange,blue |
17 | alert(removed); |
18 | // yellow,返回的数组中只包含一项 // 插入两项,删除一项 |
这两个方法都接受两个参数,indexOf() 方法从数组的开头(位置 0)开始向后查找, lastIndexOf() 方法则从数组的末尾开始向前查找
这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。
every()和some()都是用于查询数组中的项是否满足某个条件。
例子:
1 | var numbers = [1,2,3,4,5,4,3,2,1]; |
2 | var everyResult = numbers.every(function(item, index, array){ |
3 | return (item > 2); |
4 | }); |
5 | alert(everyResult); |
6 | //false |
7 | var someResult = numbers.some(function(item, index, array){ |
8 | return (item > 2); |
9 | }); |
10 | alert(someResult); |
11 | //true |
期的毫秒数
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
global :布尔值,表示是否设置了 g 标志。
ignoreCase :布尔值,表示是否设置了 i 标志。
lastIndex :整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
multiline :布尔值,表示是否设置了 m 标志。
source :正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
例子:
1 | var pattern1 = /\[bc\]at/i; |
2 | alert(pattern1.global); |
3 | alert(pattern1.ignoreCase); |
4 | alert(pattern1.multiline); |
5 | alert(pattern1.lastIndex); |
6 | alert(pattern1.source); |
7 | |
8 | var pattern2 = new RegExp("\\[bc\\]at", "i"); |
9 | alert(pattern2.global); |
10 | alert(pattern2.ignoreCase); |
11 | alert(pattern2.multiline); |
12 | alert(pattern2.lastIndex); |
13 | alert(pattern2.source); |
apply(),call(),取决于采用哪种传递参数。如果有arguments对象,或者包括一个数组,那么使用apply()会更方便,否则使用call()更方便。
1 | var s1 = new String("some text"); |
2 | var s2 = s1.subString(2); |
3 | s1 = null; |
以上分别适用Boolean和Number对应的布尔值和数字值
evel()方法就像是一个完整的 ECMAScript 解析器,它只接受一个参数,即要执行的 ECMAScript (或 JavaScript)字符串。
1 | evel("alert('hi')"); === alert("hi") |
当解析器发现代码中调用 eval() 方法时,它会将传入的参数当作实际的 ECMAScript 语句来解析,然后把执行结果插入到原位置。通过 eval() 执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。
Global包含的属性:undefined、NaN、Infinity

ES5禁止给undefined、NaN、Infinity赋值。
2.max()和min()的方法
要找到数组中的最大或最小值,可以像下面这样使用 apply() 方法
例子:
1 | var values = [1,2,3,4,5,6,7,8]; |
2 | var max = Math.max.apply(Math,values) |
Math.ceil() 执行向上舍入,即它总是将数值向上舍入为最接近的整数;(无论小数多小都进1)
Math.floor() 执行向下舍入,即它总是将数值向下舍入为最接近的整数;(无论小数多大,都舍去)
Math.round() 执行标准舍入,即它总是将数值四舍五入为最接近的整数(5<=进1)
Math.random() 方法返回大于等于 0 小于 1 的一个随机数。
1 | var num = Math.floor(Math.random() * 10 + 1); |
假设random = 0.3,则:
num = 0.3 * 10 + 1 = 4;
Math.floor()不看小数,直接取整。
函数 selectFrom() 接受两个参数:应该返回的最小值和最大值。而用最大值减最小值再加 1 得到
了可能值的总数,然后它又把这些数值套用到了前面的公式中。这样,通过调用 selectFrom(2,10)
就可以得到一个介于 2 和 10 之间(包括 2 和 10)的数值了。利用这个函数,可以方便地从数组中随机
取出一项
例如:
1 | function selectFrom(lowerValue, upperValue) { |
2 | var choices = upperValue - lowerValue + 1; |
3 | return Math.floor(Math.random() * choices + lowerValue); |
4 | } |
5 | var num = selectFrom(2, 10); |
6 | alert(num); |
7 | // 介于 2 和 10 之间(包括 2 和 10)的一个数值 |
把 configurable 设置为 false ,表示不能从对象中删除属性
参数:形参和实参
形参:函数定义的时候函数名字后面的小括号里的变量就是参数,是不需要写var
形参:函数调用的时候小括号里传入的变量或者是值
返回值:函数中如果有return,那么这个函数就有返回值
如果函数没有
函数作用:代码重复使用
函数的参数:
1.形参:函数定义的时候,函数名字后面的小括号里面的变量
2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值
返回值:
函数中有return,函数有返回值
函数中没有return,函数没有返回值
没有明确返回值:函数中没有return或者return后面没有任何内容
如果一个函数没有明确的返回值,接收这个函数,结果是undefined
无参数 无返回值 的函数
无参数 有返回值 的函数
有参数 无返回值 的函数
有参数 有返回值 的函数
arguments ——-> 可以获取函数调用的时候,传入的实参的个数
arguments是一个对象,是一个伪数组
arguments.length ——> 是实参的个数
arguments[索引] ——-> 实参的值
作用域:变量的使用范围
全局作用域:全局变量在任何位置都可以使用的范围
局部作用域:局部变量只能在某个笛梵使用---函数内
作用域链:在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用,找不到则继续向外面找这个变量,找到则使用,一直找到全局作用域,找不到则是undefined
全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
局部变量:在函数定义的变量
预解析:在执行代码之前做的事情
变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域做的最上面
函数中的变量声明,会提升到该函数的作用域链的最上面(里面)
如果有多对script标签都有相同名字的函数,预解析的时候是分段的,互不影响
面向对象特性:封装,继承,多态 (抽象性)
js不是面向对象的语言,但可以模拟面向对象的思想
js是一门基于对象的语言
什么是对象?
看得见,摸得到,具体特指的某个东西
找对象
描述找对象
对象:有属性和方法,具体特指的某个事物
特征———-属性
行为———-方法
创建对象三种方式
1.调用系统的构造函数创建对象
2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
3.字面量的方式创建对象
实例化对象
1 | var obj = new Object() |
对象有特征---属性和行为---方法
添加属性----如何添加属性? 对象.名字=值
obj.xx 就是添加属性
obj.xx = function(){
//代码
};就是方法(也就是通过匿名函数将对象名赋值给他)
例子:
1 | function test(name,age){ |
2 | var obj = new Object(); |
3 | obj.name = name; |
4 | obj.age = age; |
5 | obj.sayHi = function(){ |
6 | console.log("hello,我叫:"+this.name+"我今年:"+"this.age") |
7 | } |
8 | return obj |
9 | } |
10 | //通过参数使用函数 |
11 | person1 = test('小明',28); |
12 | person2 = test('小刚',21); |
例子:
1 | function Dog(){ |
2 | this.name = name; |
3 | this.age = age; |
4 | this.sex = sex; |
5 | this.sayHi=function(){ |
6 | console.log("小狗的名字:"+this.name+",年龄是:"+this.age+" 性别:"+this.sex); |
7 | } |
8 | var dog = new Dog("小黄",10,"公"); |
9 | console.log(dog instanceof Person);//false |
10 | console.log(dog instanceof Dog);//true |
11 | } |
1.在内存中开辟(申请一块空闲的空间)空间,存储创建的新的对象
2.把this设置为当前的对象
3.设置对象的属性和方法的值
4.把this这个对象返回
例子:
1 | var obj = {}; |
2 | obj.name = "小白"; |
3 | obj.age = 10; |
4 | |
5 | obj.sayHi=function(){ |
6 | console.log("我是:"+this.name); |
7 | } |
8 | obj.sayHi(); |
9 | |
10 | //优化后 |
11 | |
12 | var obj2 = { |
13 | name:"小明", |
14 | age:20, |
15 | sayHi:function(){ |
16 | console.log("我是:"+this.name); |
17 | }, |
18 | eat:function(){ |
19 | console.log("吃了"); |
20 | } |
21 | } |
22 | obj2.sayHi(); |
23 | obj2.eat(); |
js是一门什么样的语言?
是一门解释性的语言
是一门脚本语言
是一门弱类型语言,声明变量都用var
是一门基于对象的语言
是一门动态类的语言
1、代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
2、对象没有什么,只要点了,通过语法,那么就可以为对象添加属性或者方法
原始数据类型: number,string,boolean,undefined,null,object
基本类型(简单类型),值类型: number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null
值类型的值在那一块空间中存储?栈中存储
引用类型的值在哪一块空间中存储?栈和堆中存储
//值类型,值在栈上
var num =10;
//复杂类型,对象在堆,地址(引用)在栈
var obj = {}
//值类型之间传递,传递的是值
//引用类型之间传递,传递的是地址(地址)
进入mongo,直接命令行键入mongo
查看数据库:show dbs
查看某个库:use db_name
查看某个库下的表:show tables
查看某个表下面的数据:db.表名.find().pretty()
pretty()让代码更容易阅读
1 | db.collection.find(query, projection) |
插入数据:
use db_name
db.表名.insert({ “name”:”test” })
1 | > show dbs -- 查看数据库列表 |
2 | |
3 | \> use admin --创建admin数据库,如果存在admin数据库则使用admin数据库 |
4 | |
5 | \> db ---显示当前使用的数据库名称 |
6 | |
7 | \> db.getName() ---显示当前使用的数据库名称 |
8 | |
9 | \> db.dropDatabase() --删当前使用的数据库 |
10 | |
11 | \> db.repairDatabase() --修复当前数据库 |
12 | |
13 | \> db.version() --当前数据库版本 |
14 | |
15 | \> db.getMongo() --查看当前数据库的链接机器地址 |
16 | |
17 | \> db.stats() 显示当前数据库状态,包含数据库名称,集合个数,当前数据库大小 ... |
18 | |
19 | \> db.getCollectionNames() --查看数据库中有那些个集合(表) |
20 | |
21 | \> show collections --查看数据库中有那些个集合(表) |
22 | |
23 | \> db.person.drop() --删除当前集合(表)person |
权限管理
db.createUser({ user: ‘用户名’, pwd: ‘密码’, roles: [{ role: ‘权限’, db: ‘库’ }] })
1 | Read:允许用户读取指定数据库 |
2 | readWrite:允许用户读写指定数据库 |
3 | dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
4 | userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
5 | clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
6 | readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 |
7 | readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 |
8 | userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
9 | dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
10 | root:只在admin数据库中可用。超级账号,超级权限 |
远程服务器端口访问不了
1 | firewall-cmd --zone=public --permanent --add-port=27017/tcp |
1 | firewall-cmd --reload |
2.创建普通用户
use foo
show roles #可以查看角色
db.createUser(
{
user: “simpleUser”,
pwd: “123456”,
roles: [“readWrite”,”dbAdmin”,”userAdmin”]
}
)
3.查看已存在的用户
db.system.users.find()
4.删除用户
db.system.users.remove({user:”simpleUser”})
查询表的字段信息:desc table(表名);
查看数据库:show databases;
查看某个数据库:user database(数据库名);
查看当前使用的表:show tables;
查询 表中的数据 select * from 表名;
插入数据 insert into 表名(字段1,字段2,…,字段n) values(值1,值2,…,值n);
例如:
1 | insert into dif(st_title,st_author,submission_data) values ("学习","hello","2016-07-09"); |
查询语句
1 | SELECT field1, field2,...fieldN FROM table_name1, table_name2... |
2 | [WHERE condition1 [AND [OR]] condition2..... |
例子:
1 | select * from where st_author = "怎么样"; |
mysql复制表的两种方式。
第一、只复制表结构到新表
1 | create table 新表 select * from 旧表 where 1=2 |
或者
1 | create table 新表 like 旧表 |
第二、复制表结构及数据到新表
1 | create table新表 select * from 旧表 |
数据库备份
mysqldump -hlocalhost -u boke -p hello > /home/thacker/文档/mysql_backup/my_sql_dump.sql
mysqldump -h数据库地址 -u 用户名 -p 回车后写密码 数据库名 >(到的意思) 存放地址/备份数据名称.sql
恢复数据库
create database my_database;(为了直观看出恢复,创建了个表)
mysql -u boke -p hello1(随意数据库名称) < /home/thacker/文档/mysql_backup/my_sql_dump.sql
mysql -u 用户名 -p 回车后写密码 数据库名 <(到的意思) 存放地址/备份数据名称.sql
解决外健约束问题
alter table 表名
nocheck(不检查) constraint(约束) FK_约束的外键
INSERT JOIN(内连接)
检查两个表,连接两个表相同的字段信息
select 字段名*n
from student s
insert join class c
on s.class_id = c.id
可选:加上WHERE子句、ORDER BY等子句。
outer join(外连接)
select 字段名*n
from student s
outer join class c
on s.class_id = c.id
区别
1、表和索引所占空间:
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小;
DELETE操作不会减少表或索引所占用的空间;
DROP语句将表所占用的空间全释放掉。
2、应用范围:
TRUNCATE 只能对table;
DELETE可以是table和view。
3、执行速度:
drop > truncate > delete
4、delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
5、DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
6、当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
7、如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变;
使用truncate删除之后,种子会恢复到初始值。
总结
1、delete 语句可以使用where子句实现部分删除,而truncate不可以,会将表中的整个数据全部删除,使用时,可以按需求选择;
2、如果想从表中删除所有的数据,不要使用delete,可以使用truncate语句,因为这样执行速度更快。truncate语句实际是删除原来的表然后重新建立一个新表;
3、在没有备份情况下,谨慎使用 drop 与 truncate。要删除表结构使用drop;
4、对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。