JavaScript相关
1、前言
2、JavaScript
2.1、JavaScript概念
2.2、JavaScript组成
2.3、JavaScript的使用
2.4、ECMAScript
2.4.1、基础语法
2.4.2、数据类型
2.4.3、操作符和表达式
2.4.4、if分支语句
2.4.5、switch分支语句
2.4.6、for循环语句
2.4.7、while循环语句
2.4.8、break、continue语句
2.4.9、函数function
2.4.10、数组Array
2.4.11、String类型的常用方法
2.5、DOM
2.5.1、DOM概念
2.5.2、DOM节点
2.5.3、DOM方法
2.5.4、DOM属性
2.6、事件
2.7、BOM
2.7.1、Window对象
2.7.2、Location对象
2.7.3、History对象
2.7.4、Navigator对象
2.7.5、Screen对象
2.8、例子
1、前言
就算是后端开发,有时候也需要写一点JS代码,所以对JavaScript还是有必要了解。前端HTML和CSS挺简单,JavaScript有难度,所以JavaScript玩的溜的人还是很厉害的。作为后端开发人员,我们了解JS中基本的内容就行,有兴趣的话当然可以深入研究去精通。
2、JavaScript
2.1、JavaScript概念
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。
小结:JavaScript是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验HTML表单输入的正确性,起源于Netspace公司的LiveScript语言。现发展为一门强大的编程语言。它与Java语言没有任何关系,只是名称上类似。
2.2、JavaScript组成
完整的JavaScript由ECMAScript(核心)、DOM(Document Object Model,文档对象模型)、BOM(Browser Object Model,浏览器对象模型)这三部分组成。
图示如下: 说明如下:
ECMAScript :JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准。
DOM :文档对象模型,是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。
BOM :浏览器对象模型,对浏览器窗口进行访问和操作。BOM作为JavaScript的一部分,并没有相关标准的支持,每一个浏览器都有自己的实现。
2.3、JavaScript的使用
在HTML中通过使用
标签来引入JavaScript脚本。可以放在
里面,也可以放在
里面,一般是放在末尾。如下: 两种方式引入的区别是加载顺序不一样,根据需求选择放在哪里。可以引入外部的js文件,如上面,也可以自己在标签内写js代码。
2.4、ECMAScript
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是javascript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。
它JavaScript的核心部分,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言(比如JS)是什么样子。
2.4.1、基础语法
(1)注释与分号
注释有单行注释//
和多行注释/**/
,如下:
< script>
< / script>
一般语句结束使用分号,如果省略,则由解析器确定语句结尾。好的习惯是每句JS代码后面都加上分号;
,因为解析器可能会断句错误。
(2)标识符
指变量、函数、属性名字,或者函数的参数。标识符的命名规则如下:
由字母、数字、下划线或美元符号组成。
不能以数字开头。
不能使用关键字、保留字作为标识符。
(3)变量
ECMAScript的变量是松散类型,松散类型的定义是可以用来保存任何类型的数据,也就是说每个变量仅仅是一个用于保存值的占位符而已。变量的声明要使用var操作符,如下:
< script>
var id;
console. log ( id) ;
id = 'id1001' ;
console. log ( id) ;
var name = '云过梦无痕' ;
console. log ( name) ;
var age = 25 , address = '湖北武汉' , sex = '男' ;
console. log ( age + "\n" + address + "\n" + sex) ;
< / script>
注意:ECMAScript中的一切(变量、函数名和操作符)都区分大小写。
2.4.2、数据类型
分为基本数据类型和复杂数据类型。基本数据类型有Undefined、Null、Boolean、Number、String5种。复杂数据类型有Object。如下图: 这里说的主要是5种基本数据类型。
(1)undefined类型
声明了一个变量,但未赋值,那么它就是一个undefined类型的数据。undefined类型只有一个值,即特殊的undefined。如下:
< script>
var age, sex;
console. log ( age) ;
console. log ( sex) ;
< / script>
(2)null类型
null值表示一个空对象指针,如果定义的变量准备在将来用于保存对象,那么最好将变量值初始化为null值。undefined值是派生自null值的,所以undefined==null的返回结果是true。如下:
< script>
var name = null ;
var address = null ;
console. log ( name) ;
console. log ( address) ;
console. log ( name == address) ;
console. log ( undefined == null ) ;
console. log ( null == undefined) ;
< / script>
(3)number类型
number类型用于表示整数和浮点数。NaN即Not a Number的缩写,即非数值,是一个特殊的数值。任何涉及到NaN的操作都会返回NaN。 NaN与任何值都不相等,包括自身。
isNaN(n) :用于检测n是否为非数值,返回结果布尔值,参数可以是任何类型,isNaN()对接收的数值,先尝试转换为数值,再检测是否为非数值。
Number(n) :将n强制转换数值类型。
parseInt(n) :提取数值,且必须是以数字开头。
parseFloat(n) :从第一个字符开始解析每个字符,直至遇到一个无效的浮点数字符为止。
如下:
< script>
var name = 'ycz' , age = 25 , id = '10010' ;
console. log ( isNaN ( name) ) ;
console. log ( isNaN ( age) ) ;
console. log ( isNaN ( id) ) ;
console. log ( isNaN ( height) ) ;
console. log ( typeof ( id) ) ;
id = Number ( id) ;
console. log ( typeof ( id) ) ;
var weight = '67.5kg' , height = '182.54cm' ;
console. log ( parseInt ( weight) ) ;
console. log ( parseInt ( height) ) ;
console. log ( "十六进制0xe表示的十进制数是:" + parseInt ( '0xe' , 16 ) ) ;
console. log ( parseFloat ( weight) ) ;
console. log ( parseFloat ( height) ) ;
var m = '0123' , n = '0.123asbd' ;
console. log ( parseInt ( m) ) ;
console. log ( parseFloat ( m) ) ;
console. log ( parseInt ( n) ) ;
console. log ( parseFloat ( n) ) ;
< / script>
(4)string类型
String类型表示由0或多个16位Unicode字符组成的字符序列,即是字符串。字符串可以由双引号或单引号表示。
str.toString() :将str转换为字符串,返回str的一个副本。
String(str) :将str转换为字符串。
如下:
< script>
var name = 'ycz' , age = 25 , b = true , address = null ;
console. log ( typeof ( age) ) ;
ageStr = age. toString ( ) ;
console. log ( typeof ( ageStr) ) ;
console. log ( typeof ( age) ) ;
b2 = String ( b) ;
console. log ( typeof ( b2) ) ;
addressStr = String ( address) ;
console. log ( typeof ( addressStr) ) ;
console. log ( typeof ( address) ) ;
< / script>
(5)boolean类型
表示真假,false表示假,true表示真。除了0之外的所有数字,都可以转换为布尔值true,除了""之外的所有字符,都可以转为布尔值true,null和undefined转换为布尔值false。
如下:
< script>
var a = true , b = false ;
console. log ( typeof ( a) ) ;
console. log ( typeof ( b) ) ;
console. log ( typeof ( a. toString ( ) ) ) ;
var x = 0 , y= 5 ;
console. log ( Boolean ( x) ) ;
console. log ( Boolean ( y) ) ;
var m = 'ycz' , n = '' , t = null , q;
console. log ( Boolean ( m) ) ;
console. log ( Boolean ( n) ) ;
console. log ( Boolean ( t) ) ;
console. log ( Boolean ( q) ) ;
< / script>
2.4.3、操作符和表达式
将同类型的数据,用运算符号按一定的规则连接起来的、有意义的式子称为表达式。操作符有以下5种。
(1)算数操作符
+、-、*、/、%、递增、递减。如下:
< script>
var a = 20 , b = 5 ;
console. log ( a + b) ;
console. log ( a - b) ;
console. log ( a * b) ;
console. log ( a / b) ;
console. log ( a % b) ;
a++ ;
b-- ;
console. log ( a) ;
console. log ( b) ;
< / script>
(2)逻辑操作符
逻辑操作符有&&、||、!三种,返回布尔值。
&&:如果第一个操作数隐式类型转换后为true,则返回第二个操作数,否则返回第一个操作数。
||:如果第一个操作数隐式类型转换后为true,则返回第一个操作数,否则返回第二个操作数。如果两个操作数都是null、NaN、undefined,则返回null、NaN、undefined。
!:返回相反的布尔值。
如下:
< script>
var a = true , b = false ;
console. log ( a && b) ;
console. log ( a || b) ;
console. log ( ! ( a && b) )
var x = null , y = null ;
console. log ( x && y) ;
console. log ( x || y) ;
console. log ( ! ( x && y) ) ;
< / script>
(3)赋值操作符
=、+=、-=、*=、/=、%=,用于对变量进行赋值。如下:
< script>
var a = 20 , b= 5 ;
a += b;
console. log ( a) ;
a -= b;
console. log ( a) ;
a *= b;
console. log ( a) ;
a /= b;
console. log ( a) ;
a %= b;
console. log ( a) ;
< / script>
(4)比较操作符
> 、< 、>= 、<= 、== (恒等于)、=== (全等于)、!= (不等)、!== (全不等)。
==
只比较值是否相等,===
比较值的同时比较数据类型是否相等,!=
只比较值不等,!==
比较值和类型都不等。比较操作符返回布尔值。如下:
< script>
var a = 20 , b = '20' ;
var c = a == b;
var d = a === b;
console. log ( c) ;
console. log ( d) ;
var e = null , f;
console. log ( e == f) ;
console. log ( e === f) ;
< / script>
(5)三目操作符
条件? 代码1 : 代码2
条件为true,执行代码1,否则执行代码2。
< script>
var score = 76 ;
var res = score < 60 ? '成绩不及格!' : '成绩及格!' ;
console. log ( res) ;
< / script>
2.4.4、if分支语句
语法格式:
语法一:if ( condition) {
代码1 ;
}
语法二:if ( condition) {
代码1 ;
} else {
代码2 ;
}
语法三:if ( condition1) {
代码1 ;
} else if ( condition2) {
代码2 ;
} else {
代码3 ;
}
如下:
< script>
var age = 25 ;
if ( age < 18 ) {
alert ( '小孩子不许上网!' ) ;
} else {
alert ( '欢迎成年人!' ) ;
}
< / script>
< script>
var age = prompt ( '请输入你的年龄:' ) ;
if ( isNaN ( age) || age > 120 ) {
alert ( '请输入有效年龄!' ) ;
} else if ( age < 18 ) {
alert ( '少年时期!' ) ;
} else if ( age <= 30 ) {
alert ( '青年时期!' ) ;
} else if ( age < 60 ) {
alert ( '油腻时期!' ) ;
} else {
alert ( '老年时期!' ) ;
}
< / script>
2.4.5、switch分支语句
语法:
switch ( expression) {
case value:
statement1;
break ;
case value:
statement2;
break ;
case value:
statement3;
break ;
……
default :
statement;
}
如下:
< script>
var weekDay = new Date ( ) . getDay ( ) ;
var res = null ;
switch ( weekDay) {
case 0 :
res = '天' ;
break ;
case 1 :
res = '一' ;
break ;
case 2 :
res = '二' ;
break ;
case 3 :
res = '三' ;
break ;
case 4 :
res = '四' ;
break ;
case 5 :
res = '五' ;
break ;
default :
res = '六' ;
}
alert ( '今天是星期' + res + '!' ) ;
< / script>
2.4.6、for循环语句
语法:
for ( 语句1 ; 语句2 ; 语句3 ) {
循环体代码;
}
< script>
var count = null ;
for ( var i= 1 ; i<= 100 ; i++ ) {
if ( i% 2 == 0 ) {
document. write ( i + "\t" ) ;
count++ ;
}
if ( count % 10 == 0 ) {
document. write ( ' ' ) ;
}
}
document. write ( ' ' + '1到100之间的偶数有:' + count + '个!' ) ;
< / script>
2.4.7、while循环语句
语法:
语法1 :
while ( 条件) {
循环体代码;
}
语法2 :
do {
循环体代码;
} while ( 条件) ;
for循环适合已知次数的循环体,而while循环适合未知次数的循环体。
如下:
< script>
var i = 1 ;
while ( i <= 100 ) {
if ( i % 10 == 0 ) {
document. write ( i + '\t' ) ;
}
i++ ;
}
< / script>
< script>
var i = 1 ;
do {
if ( i % 10 == 0 ) {
document. write ( i + '\t' ) ;
}
i++ ;
} while ( i<= 100 ) ;
< / script>
2.4.8、break、continue语句
break是立即退出循环体,continue是结束本次循环,继续开始下一次循环。break可以用在while循环和for循环中,而continue只能用于for循环中。如下:
< script>
var i = 1 ;
while ( i<= 100 ) {
document. write ( '现在的值:' + i + ' ' ) ;
i++ ;
if ( i > 15 ) {
break ;
}
}
< / script>
< script>
for ( var i= 1 ; i<= 20 ; i++ ) {
if ( i % 2 == 0 ) {
continue ;
}
document. write ( '现在的值:' + i + ' ' ) ;
}
< / script>
2.4.9、函数function
JS中可以定义函数,然后进行调用。
(1)函数的定义
函数使用function定义声明,后跟一组参数以及函数体,语法如下:
function functionName ( [ arg0, arg1……argn] ) {
statements
}
functionName是函数名,属于标识符。arg0,arg1……argn是函数的参数,[]中的内容是可选项,即函数可不带参数。
如下:
< script>
function f1_demo ( name) {
alert ( '我的名字是:' + name + '!' ) ;
}
f1_demo ( '云过梦无痕' ) ;
< / script>
(2)函数的返回值
函数可以有返回值,可以没有返回值。任何函数可以通过return语句来返回一个值。说明如下:
函数会在执行完return语句之后停止并立即退出。
return语句可以不带有任何返回值,用于提前停止函数执行又不需要返回值的情况。
如下:
< script>
function sum_add ( m, n, p) {
var sum = m + n + p;
return sum;
}
var sum = sum_add ( 10 , 25 , 21 ) ;
alert ( '和值是:' + sum) ;
< / script>
function demo ( arg) {
if ( isNaN ( arg) ) {
return ;
} else {
return arg * 2 ;
}
}
var res = demo ( 'ycz' ) ;
alert ( '值为:' + res) ;
< / script>
(3)函数的参数arguments
ECMAScript中的参数在内部用一个数组来表示,在函数体内通过arguments对象来访问这个数组参数。
说明:
arguments对象只是与数组类似,并不是Array的实例。
[]语法访问它的每一个元素,按索引访问,从0开始。
length属性确定传递参数的个数。
如下:
< script>
function fun_demo ( ) {
console. log ( '函数的参数个数为:' + arguments. length) ;
console. log ( '函数的第3个参数为:' + arguments[ 2 ] ) ;
}
fun_demo ( 1 , 2 , 3 , 4 , 5 ) ;
function fun_demo2 ( m, n) {
arguments[ 0 ] = 25 ;
console. log ( '第一个参数为:' + m) ;
}
fun_demo2 ( 25 , 21 ) ;
< / script>
< script>
function avg_count ( ) {
document. write ( '一共有' + arguments. length + '个参数!' ) ;
var sum = 0 ;
for ( var i = 0 ; i < arguments. length - 1 ; i++ ) {
sum += arguments[ i] ;
}
var avg = sum / arguments. length;
return avg;
}
var res = avg_count ( 10 , 20 , 30 ) ;
document. write ( '平均数为:' + res + ' ' ) ;
var res2 = avg_count ( 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 ) ;
document. write ( '平均数为:' + res2) ;
< / script>
如果不知道函数的参数个数的话,那么使用内置参数arguments是个很好的选择。
2.4.10、数组Array
Array是属于复杂类型Object的。ECMAScript中的数组与其它语言中的数组不太一样,因为可以在同一个数组中存储不同类型的元素项,而Java中的数组存储的必须是同种类型数据的集合。数组的创建如下:
var a = new Array ( length) ;
var a = new Array ( ... ) ;
var a = [ "" , "" , "" , ... ] ;
数组元素的访问使用下标来进行,从索引0开始,注意数组下标的越界问题。使用length属性可以获取数组的元素个数。
如下:
< script>
var arr0 = new Array ( 25 , null , 'yan' , false , 'cheng' ) ;
for ( var i= 0 ; i< arr0. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr0[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr2 = new Array ( 3 ) ;
arr2[ 0 ] = 'red' ;
arr2[ 1 ] = 'yellow' ;
arr2[ 2 ] = 'blue' ;
for ( var i= 0 ; i< arr2. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr2[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr3 = [ 'yan' , 'cheng' , 'zhi' ] ;
document. write ( '此数组的元素个数为:' + arr3. length + ' ' ) ;
for ( var i= 0 ; i< arr3. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr3[ i] + ' ' ) ;
}
< / script>
数组的常用方法如下:
push(a) :将参数a添加到数组的尾部,返回新数组的长度值。
unshift(a) :将参数a添加到数组的头部,返回新数组的长度值。
pop() :删除数组的最后一个元素,返回被删除的那个元素。
shift() :删除数组中的第一个元素,返回被删除的那个元素。
join(separator) :以指定连接符把数组中的所有元素连为一个串,返回字符串值。
reverse() :颠倒数组中元素的顺序,返回一个数组。
sort() :对数组的元素进行排序,返回一个数组。
concat(arr,arr2,…) :用于连接两个或多个数组,返回一个新的数组。
slice(start,end) :从已有的数组中截取片段。start(必需)规定从何处开始选取。如是负数,则用数组长度加上该数,即是其开始位置。end(可选)规定从何处结束选取,是数组末尾的数组下标。
splice(index,count) :删除从索引index开始的多个元素,返回删除的元素组成的数组。
indexOf(searchvalue,startIndex) :从数组的开头(位置0)开始向后查找,返回值为查找项(只限于第一个)在数组中的位置索引,即number类型值,没有找到则返回值-1。
lastIndexOf(searchvalue,endIndex) :从数组末尾开始查找元素,类似indexOf()方法,但第二个参数是结束的索引位。
示例如下:
< script>
var arr = new Array ( 'cheng' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
document. write ( ' ' ) ;
arr. push ( 'zhi' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. unshift ( 'yan' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. pop ( ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. shift ( ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr2 = [ 'yun' , 'guo' , 'meng' , 'wu' , 'heng' ] ;
var res = arr2. join ( "===>" ) ;
document. write ( '连接后的字符串:' + res + ' ' + ' ' ) ;
for ( var i= 0 ; i< arr2. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr2[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr3 = arr2. reverse ( ) ;
for ( var i= 0 ; i< arr3. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr3[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr4 = arr2. sort ( ) ;
for ( var i= 0 ; i< arr4. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr4[ i] + ' ' ) ;
}
var num = [ 1 , 4 , 56 , 32 , 3 , 53 , 12 ] ;
num. sort (
function ( x, y) {
return x - y;
}
) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< num. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + num[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
num. sort (
function ( x, y) {
return y - x;
}
) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< num. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + num[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr5 = num. concat ( arr2) ;
for ( var i= 0 ; i< arr5. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr5[ i] + ' ' ) ;
}
var arr6 = arr5. slice ( 0 , num. length) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< arr6. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr6[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr7 = arr6. splice ( 0 , 3 ) ;
for ( var i= 0 ; i< arr7. length; i++ ) {
document. write ( '被删除的第' + ( i+ 1 ) + '个元素为:' + arr7[ i] + ' ' ) ;
}
document. write ( '删除后原数组的长度变为:' + arr6. length) ;
document. write ( ' ' ) ;
var arr8 = [ '云' , '过' , '云' , '之' , '梦' , '彼' , '云' , '痕' ] ;
var result = arr8. indexOf ( '云' , 1 ) ;
document. write ( '云字的索引位:' + result + ' ' ) ;
var result2 = arr8. lastIndexOf ( '云' ) ;
document. write ( '云字的索引位:' + result2) ;
< / script>
2.4.11、String类型的常用方法
string类型在JS中属于基本类型。常用的方法如下:
charAt(index) :返回index索引位置的字符。
charCodeAt(index) :返回index索引位置的字符对应的ASCII编码。
indexOf(str) :从字符串中搜索给定的子字符串,返回子字符串(仅限第一个)的位 置索引。没有找到该子串,则返回-1。
lastIndexOf(str) :与indexOf方法类似,不过是从末尾开始搜索。
slice(start,end) :截取字符串,返回截取的片段。start为必需参数,开始位置,为负数时用字符串长度加上该数,即是开始位置。end为可选参数,表示到哪里结束,end本身不在截取范围之内,省略时截取到末尾。
substring(start,len) :功能同slice()完全一样,区别是当参数为负数时,自动将参数归至0。而且,substring()会将较小的数作为开始位置,将较大的数作为结束位置。
substr(start,len) :从指定索引位置开始截取指定长度字符串。start为必需参数,起始位置,当其为负数时,用字符串长度加上该数,即为起始位置。len为可选参数。
split(separator) :使用指定分隔符把字符串分割成字符串数组,返回数组。
replace(regex/substr,replacement) :用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,返回一个替换后的string字符串。regex为必需参数,规定子字符串或要替换的模式的RegExp对象。replacement为必需参数,一个字符串值。
toUpperCase() :字符串转换成大写。
toLowerCase() :字符串转换成小写。
< script>
var name = 'yanchengzhi' ;
var char = name. charAt ( 6 ) ;
document. write ( '索引位置6的字符是:' + char + ' ' ) ;
var asc = name. charCodeAt ( 6 ) ;
document. write ( '索引位置6的字符的ACSII码值是:' + asc + ' ' ) ;
var email = '[email protected] ' ;
var index = email. indexOf ( '@qq' ) ;
document. write ( '@qq第一次出现的位置是::' + index + ' ' ) ;
var last_index = email. lastIndexOf ( '1' ) ;
document. write ( '1最后一次出现的位置是::' + last_index + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( - 7 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( - 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( 10 , 7 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( - 7 , 7 ) + ' ' ) ;
var url = 'www.ycz.abcd.com' ;
var arr = url. split ( '.' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个字符串是:' + arr[ i] + ' ' ) ;
}
function getsuffix ( fileName) {
var index = fileName. indexOf ( '.' ) ;
var suffix = fileName. substring ( index+ 1 ) ;
return suffix;
}
document. write ( '该文件的后缀名是:' + getsuffix ( '灵剑尊.txt' ) + ' ' ) ;
document. write ( '该文件的后缀名是:' + getsuffix ( '乐逍遥.mp3' ) + ' ' ) ;
document. write ( '该文件的后缀名是:' + getsuffix ( '山海经随手笔记.docx' ) + ' ' ) ;
var url2 = url. replace ( '.' , '点' ) ;
document. write ( '替换后的子串是:' + url2 + ' ' ) ;
var str = 'I am a Single Dog' ;
document. write ( '转换为大写是:' + str. toUpperCase ( ) + ' ' ) ;
document. write ( '转换为小写是:' + str. toLowerCase ( ) + ' ' ) ;
function toTuoFeng ( str) {
var arr = str. split ( '_' ) ;
var result = arr[ 0 ] ;
for ( var i= 1 ; i< arr. length; i++ ) {
result += arr[ i] . charAt ( 0 ) . toUpperCase ( ) + arr[ i] . substr ( 1 ) ;
}
return result;
}
document. write ( '转换为驼峰是:' + toTuoFeng ( 'yan_cheng_zhi_de_yun' ) + ' ' ) ;
< / script>
2.5、DOM
2.5.1、DOM概念
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的"浏览器大战",双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScript、ActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。
DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。我们了解HTML DOM就可以了,HTML DOM定义了所有HTML元素的对象和属性,以及访问它们的方法。换言之,HTML DOM是关于如何获取、修改、添加或删除HTML元素的标准。
2.5.2、DOM节点
在HTML DOM中,所有事物都是节点。DOM是被视为节点树的HTML。如下:
整个文档是一个文档节点。
每个HTML元素是元素节点。
HTML元素内的文本是文本节点。
每个HTML属性是属性节点。
注释是注释节点。
节点树
HTML DOM将HTML文档视作树结构,这种结构被称为节点树DOM Tree,如下: 通过HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。
节点父、子和同胞
节点树中的节点彼此拥有层级关系。父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。说明如下:
在节点树中,顶端节点被称为根(root)。
每个节点都有父节点、除了根(它没有父节点)。
一个节点可拥有任意数量的子节点。
同胞是拥有相同父节点的节点。
示例如下: 说明如下:
节点没有父节点,它是根节点。
节点和
节点是
节点的子节点。
节点和
节点是同胞节点。
节点和
节点是
节点的子节点。
节点的子节点是测试这个文本节点。
节点和
节点是同胞节点。
节点、
节点、
节点是
节点的子节点。
节点、
节点、
节点是同胞节点。
节点的子节点是元素1这个文本节点。
节点是
节点的子节点,也是
节点的子节点。
节点的子节点有
节点、
节点和文本节点。
节点和
节点的子节点只有文本节点。
以上就是HTML文档中所有节点之间的关系。
2.5.3、DOM方法
方法是我们可以在节点(HTML元素)上执行的动作。所有HTML元素被定义为对象,而编程接口则是对象方法和对象属性,方法是能够执行的动作,比如添加或修改元素。常用的方法如下: 示例:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< div class = " box" id = " box" > 元素1 div>
< ul id = " list" >
< li> < i> 前端界面开发 i> li>
< li class = " on" > < b> 服务器开发 b> li>
< li> < i> UI设计 i> li>
ul>
< ol>
< li> JavaScript原生 li>
< li> JavaScript框架 li>
ol>
坚持总有收获。 p>
保持进步,保持虚心。 p>
< h3> 灵剑尊
h3>
div>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
var box = document. getElementById ( 'box' ) ;
box. style. fontSize = '30px' ;
box. style. fontWeight = 'bold' ;
box. style. color = 'red' ;
box. style. fontStyle = 'italic' ;
var lis = document. getElementsByTagName ( 'li' ) ;
for ( var i= 0 ; i< lis. length; i++ ) {
lis[ i] . style. color = 'blue' ;
if ( i== 0 || i== 1 ) {
lis[ i] . style. background = '#ccc' ;
} else if ( i== 2 || i== 3 ) {
lis[ i] . style. background = '#2f2e2a' ;
} else {
lis[ i] . style. background = 'pink' ;
}
}
var classes = document. getElementsByClassName ( 'one' ) ;
for ( var i= 0 ; i< classes. length; i++ ) {
var txt = classes[ i] . innerHTML;
console. log ( '文本内容是:' + txt) ;
}
var txt = document. createTextNode ( '总会有一天释怀过去。' ) ;
var h2 = document. createElement ( 'h2' ) ;
h2. appendChild ( txt) ;
document. body. appendChild ( h2) ;
var ones = document. getElementsByClassName ( 'one' ) ;
var addTxt1 = document. createTextNode ( '云过梦无痕' ) ;
var addTxt2 = document. createTextNode ( '爱江山更爱美人' ) ;
for ( var i= 0 ; i< ones. length; i++ ) {
ones[ 0 ] . appendChild ( addTxt1) ;
ones[ 1 ] . appendChild ( addTxt2) ;
}
var d = document. getElementById ( 'd1' ) ;
var h3 = document. getElementById ( 'd1' ) . getElementsByTagName ( 'h3' ) [ 0 ] ;
d. removeChild ( h3) ;
var t = document. createTextNode ( '替换的内容' ) ;
var p = document. createElement ( 'p' ) ;
p. appendChild ( t) ;
var rh = document. getElementsByTagName ( 'h2' ) [ 0 ] ;
rh. parentNode. replaceChild ( p, rh) ;
var t2 = document. createTextNode ( 'hello world!' ) ;
var p2 = document. createElement ( 'p' ) ;
p2. appendChild ( t2) ;
var s = document. getElementById ( 'box' ) ;
document. body. insertBefore ( p2, s) ;
var pd = document. getElementById ( 'd1' ) ;
pd. setAttribute ( 'name' , 'ycz' ) ;
var name = pd. getAttribute ( 'name' ) ;
var iName = pd. getAttribute ( 'id' ) ;
console. log ( 'name属性值:' + name) ;
console. log ( 'id属性值:' + iName) ;
pd. removeAttribute ( 'name' ) ;
console. log ( 'name属性值:' + pd. getAttribute ( 'name' ) ) ;
2.5.4、DOM属性
属性是节点(HTML元素)的值,能够获取或设置。常用的属性如下:
innerHTML :获取、设置、替换元素的内容。这个属性非常有用。
nodeName :规定节点的名称。nodeName是只读的,元素节点的nodeName与标签名相同,属性节点的nodeName与属性名相同,文本节点的nodeName始终是#text,文档节点的nodeName始终是 #document。
nodeValue :规定节点的值。元素节点的nodeValue是undefined或null,文本节点的 nodeValue是文本本身,属性节点的nodeValue是属性值。
nodeType :返回节点的类型。nodeType是只读的,如下说明:
parentNode :获取节点(元素)的父节点。
childNodes :获取节点(元素)的所有子节点,返回数组。
attributes :获取节点(元素)的所有属性节点,返回数组。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< h2> 我喜欢你。
h2>
div>
< p> 仅此而已
p>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
var div = document. getElementById ( 'love' ) ;
var content = div. innerHTML;
console. log ( content) ;
var p = document. getElementsByTagName ( 'p' ) [ 0 ] ;
var c2 = p. innerHTML;
console. log ( c2) ;
div. innerHTML = '我想告诉你。 ' ;
p. innerHTML = '如果你相信的话。' ;
var divName = div. nodeName;
var divValue = div. nodeValue;
var divType = div. nodeType;
console. log ( divName + '======>' + divValue + '======>' + divType) ;
var txts = p. childNodes;
console. log ( txts[ 0 ] . nodeName + '======>' + txts[ 0 ] . nodeValue + '======>' + txts[ 0 ] . nodeType) ;
var a = div. attributes;
console. log ( a[ 0 ] . nodeName + '======>' + a[ 0 ] . nodeValue + '======>' + a[ 0 ] . nodeType) ;
var parent = div. parentNode;
console. log ( parent. nodeName + '======>' + parent. nodeValue + '======>' + parent. nodeType) ;
DOM有非常多的方法和属性,这里只是简单的说一下比较常用的几种,可以翻阅相关API文档。
2.6、事件
事件是发生在HTML元素上的“事情”。当在HTML页面中使用JavaScript时,JavaScript 能够“应对”这些事件。即事件可以是浏览器或用户做的某些事情,是文档或浏览器窗口中发生的一些特定的交互瞬间。直接在HTML元素标签内添加事件,执行脚本。
常见的事件如下:
onload :页面加载时触发。
onclick :鼠标点击时触发。
onmouseover :鼠标划过时触发。
onmouseout :鼠标离开时触发。
onmousedown :鼠标按钮在元素上按下时触发。
onmousemove :在鼠标指针移动时触发。
onmouseup :在元素上松开鼠标按钮时触发。
onfocus :获得焦点时触发。
onblur :失去焦点时触发。
onchange :域的内容改变时发生。
onsubmit :表单中的确认按钮被点击时发生。
onresize :当调整浏览器窗口的大小时触发。
onscroll :拖动滚动条滚动时触发。
onkeydown :在用户按下一个键盘按键时触发。
onkeypress :在键盘按键被按下并释放一个键时发生。
onkeyup :在键盘按键被松开时触发。
keyCode :返回onkeypress、onkeydown或onkeyup事件触发的键的值的字符代码,或键的代码。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
< link rel = " stylesheet" href = " ./css/demo.css" />
head>
< body onload = " addContent()" >
p>
点击我! button>
< br>
锁定 button>
< br> < br> < br>
春情缱绻
div>
乐逍遥 h1>
< br> < br>
< div>
< p class = " text" > 您还可以输入< span> < em id = " count" > 30 em> / 30 span> : p>
< div class = " intro" >
< textarea id = " text" cols = " 30" rows = " 5" maxlength = " 30" placeholder = " 请输入内容" > textarea>
div>
div>
< br> < br>
< div class = " box2" id = " box2" >
请选择你喜欢的颜色:
< select name = " color" id = " menu" >
< option value = " " > 请选择 option>
< option value = " red" > 红色 option>
< option value = " green" > 绿色 option>
< option value = " yellow" > 黄色 option>
< option value = " orange" > 橘色 option>
< option value = " pink" > 粉色 option>
select>
div>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
.lock {
color : #fff;
font-size : 20px;
text-align : center;
width : 240px;
height : 50px;
line-height : 30px;
background : blue;
border-radius : 8px;
cursor : pointer;
margin-top : 30px;
}
.unlock {
color : #fff;
font-size : 20px;
text-align : center;
width : 240px;
height : 50px;
line-height : 30px;
background : orange;
border-radius : 8px;
cursor : pointer;
margin-top : 30px;
}
.text span {
font-weight : bold;
color : #f00;
}
.box2 {
width : 300px;
height : 300px;
border : 1px solid pink;
overflow : auto;
}
function addContent ( ) {
var p = document. getElementById ( 'one' ) ;
p. innerHTML = '加载完毕后添加内容!' ;
}
var btn2 = document. getElementById ( 'btn2' ) ;
btn2. onclick = function ( ) {
if ( this . className == 'lock' ) {
this . className = 'unlock' ;
this . innerHTML = '解锁' ;
} else if ( this . className == 'unlock' ) {
this . className = 'lock' ;
this . innerHTML = '锁定' ;
}
}
function addGreen ( ) {
var ele = document. getElementById ( 'd1' ) ;
ele. style. background = 'green' ;
}
function changeColor ( ) {
var ele = document. getElementById ( 'd1' ) ;
ele. style. background = 'pink' ;
}
var ele = document. getElementById ( 'd2' ) ;
function mouseDown ( ) {
ele. innerHTML = '鼠标已按下!' ;
}
function mouseUp ( ) {
ele. innerHTML = '鼠标松开了!' ;
}
function mouseMove ( ) {
console. log ( '鼠标在移动!' ) ;
}
var input = document. getElementById ( 'name' ) ;
input. onfocus = function ( ) {
this . style. background = 'pink' ;
}
input. onblur = function ( ) {
this . style. background = 'gray' ;
}
var text = document. getElementById ( 'text' ) ;
var count = document. getElementById ( 'count' ) ;
text. onkeyup = function ( ) {
var wordLenth = text. value. length;
count. innerHTML = 30 - wordLenth;
}
var box2 = document. getElementById ( 'box2' ) ;
var menu = document. getElementById ( 'menu' ) ;
menu. onchange = function ( ) {
var value = this . value;
if ( value == '' ) {
box2. style. background = 'white' ;
} else {
box2. style. background = value;
}
}
点击按钮: 点击蓝色的锁定按钮: 再点击: 鼠标移动到段落上: 离开: 点击这个标题,鼠标左键不放: 松开左键: 点击进这个文本框聚焦: 离开文本框,点击别处: 在多行文本域中输入内容: 下拉框选择一个: 在开发中JS事件用的非常频繁,熟悉每个事件,对于我们后端开发来说很有好处。
2.7、BOM
浏览器对象模型(Browser Object Model,简称BOM)是浏览器的内置对象管理模型。在前端页面开发时,可以通过对浏览器的内置对象进行控制,提高Html页面的动态效果,增强用户对页面文件的体验。
BOM对浏览器窗口进行访问和操作。例如弹出新的浏览器窗口,移动、改变和关闭浏览器窗口,提供详细的网络浏览器信息(navigator object),详细的页面信息(location object),详细的用户屏幕分辨率的信息(screen object),对cookies的支持等等。BOM作为JavaScript的一部分并没有相关标准的支持,每一个浏览器都有自己的实现,虽然有一些非事实的标准,但还是给开发者带来一定的麻烦。
BOM对象
BOM提供多个对象,包括:Window、Navigator、Screen、History、Location等。其中Window对象为顶层对象,其他对象都为Window对象的子对象。
如下图示:
2.7.1、Window对象
Window是浏览器的一个实例,在浏览器中,Window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global全局对象。它表示浏览器打开的窗口、标签或者框架(若当前页面里包含多个iframe,会为每个iframe创建Window对象)。Window对象不会被实例化。
调用属性和方法都作为window的静态成员。调用Window对象的成员时,可以省略前面的window。如:window.alert() 可写成 alert() 。
注意:所有的全局变量和全局方法都被归在window上。
常用方法如下:
alert(message) :浏览器显示带有一段消息和一个确认按钮的警告框。
confirm(message) :显示一个带有指定消息和OK及取消按钮的对话框。如果用户点击确定按钮,则confirm返回true,如果点击取消按钮,则返回false。
prompt(text,defaultText) :text是要在对话框中显示的纯文本,defaultText是默认的输入文本,这个是可选参数。如果用户单击提示框的取消按钮,则返回null,如果单击确定按钮,则返回用户输入字段当前显示的文本。
open(pageURL,name,parameters) :打开一个新的浏览器窗口或查找一个已经命名的窗口。pageURL是窗口路径,name是窗口句柄(name声明了新窗口的名称,方便后期通过name对子窗口进行引用),parameters是窗口参数(各参数用逗号分隔)。
close() :将关闭window指定的顶层浏览器窗口。某个窗口可以通过调用self.close() 或只调用close()来关闭其自身。只有通过JavaScript代码打开的窗口才能够由JavaScript代码关闭。这阻止了恶意的脚本终止用户的浏览器。
setTimeout(code,millisec) :用于在指定的毫秒数后调用函数或计算表达式,会返回一个ID值。code是要调用的函数或要执行的JavaScript代码,millisec是在执行代码前需要等待的毫秒数。setTimeout()只执行code一次,如果要多次调用,可以使用setInterval()或者让code自身再次调用setTimeout()。
clearTimeout(id_of_settimeout) :取消由setTimeout()方法设置的timeout,参数是setTimeout方法返回的ID值,参数必须。
setInterval(code,millisec) :按照指定的周期(以毫秒计)来调用函数或计算表达式。会返回一个ID值。setInterval()方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
clearInterval(id_of_setinterval) :可取消由setInterval()设置的timeout。参数必须是由setInterval()返回的ID值。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
弹出警告框 button>
< br> < br>
弹出对话框 button>
< br> < br>
输入我的姓名 button>
< br> < br>
打开百度首页 button>
< br> < br>
关闭本窗口 button>
< br> < br>
点击后十秒钟弹出窗口 button>
< br> < br>
开始计数 button>
停止计数 button>
重置为0 button>
< br> < br>
span>
停止计时 button>
开始计时 button>
< br> < br>
span>
停止计时 button>
开始计时 button>
< script>
var btn1 = document. getElementById ( 'btn1' ) ;
btn1. onclick = function ( ) {
alert ( '欢迎来到本站点!' ) ;
}
var btn2 = document. getElementById ( 'btn2' ) ;
btn2. onclick = function ( ) {
var flag = confirm ( '是否确认当前为本人操作?' ) ;
if ( flag) {
alert ( '你已经确定!' ) ;
} else {
alert ( '您取消了当前操作!' ) ;
}
}
var btn3 = document. getElementById ( 'btn3' ) ;
btn3. onclick = function ( ) {
var name = prompt ( '请输入您的姓名:' , '未知' ) ;
console. log ( '您的姓名是:' + name) ;
}
var btn4 = document. getElementById ( 'btn4' ) ;
btn4. onclick = function ( ) {
window. open ( 'https://www.baidu.com' ) ;
}
var btn5 = document. getElementById ( 'btn5' ) ;
btn5. onclick = function ( ) {
window. close ( ) ;
}
var btn6 = document. getElementById ( 'btn6' ) ;
btn6. onclick = function ( ) {
setTimeout ( 'alert("你好鸭,2021!")' , 10000 ) ;
}
var id;
var a = 0 ;
var input = document. getElementById ( 'count' ) ;
function startCount ( ) {
input. value = a;
a++ ;
id = setTimeout ( 'startCount()' , 1000 ) ;
}
function stopCount ( ) {
clearTimeout ( id) ;
}
function resetZero ( ) {
a = 0 ;
input. value = a;
}
var t;
function showTime ( ) {
var time = document. getElementById ( 'showTime' ) ;
time. innerHTML = getCurrentTime ( ) ;
t = setTimeout ( 'showTime()' , 1000 ) ;
}
function getCurrentTime ( ) {
var today = new Date ( ) ;
var year = today. getFullYear ( ) ;
var month = checkTime ( today. getMonth ( ) + 1 ) ;
var day = checkTime ( today. getDate ( ) ) ;
var hour = checkTime ( today. getHours ( ) ) ;
var minute = checkTime ( today. getMinutes ( ) ) ;
var second = checkTime ( today. getSeconds ( ) ) ;
var timeNow = year + '年' + month + '月' + day + '日' + ' ' + hour + '时' + minute + '分' + second + '秒' ;
return timeNow;
}
function checkTime ( a) {
if ( a< 10 ) {
return '0' + a;
} else {
return a;
}
}
var s1 = document. getElementById ( 's1' ) ;
s1. onclick = function ( ) {
clearTimeout ( t) ;
}
var s2 = document. getElementById ( 's2' ) ;
s2. onclick = function ( ) {
showTime ( ) ;
}
function showTime2 ( ) {
var time = document. getElementById ( 'showTime2' ) ;
time. innerHTML = getCurrentTime ( ) ;
}
var t2 = setInterval ( 'showTime2()' , 1000 ) ;
var s3 = document. getElementById ( 's3' ) ;
s3. onclick = function ( ) {
clearInterval ( t2) ;
}
var s4 = document. getElementById ( 's4' ) ;
s4. onclick = function ( ) {
t2 = setInterval ( 'showTime2()' , 1000 ) ;
}
script>
body>
html>
点击: 点击: 点击确定: 点击取消: 点击: 点击确定: 输入自定义值确定:
点击: 成功跳转。
点击: 成功关闭窗口。
点击: 十秒钟后出现弹窗: 点击开始计数: 一直在变,点击停止计数: 停止了,点击重置为0: 重置成功。
这两个时间是一直在变的,点击停止计时按钮,计时会停止,点击开始计时,又会每秒钟变化一次。
2.7.2、Location对象
Location对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是window对象的属性,也是document对象的属性。可对当前页面的URL进行操作,如:导航到新的页面、获取URL信息等。window.location或者location来进行调用。
常用方法如下:
assign(url) :加载新的文档。
reload() :重新加载当前文档,传参true从服务器开始加载,相当于刷新。
replace(url) :用新的文档替换当前文档。
常用的属性如下:
hash :设置或返回从井号 (#) 开始的URL(锚)。
host :设置或返回主机名和当前URL的端口号。
hostname :设置或返回当前URL的主机名。
href :设置或返回完整的URL。
pathname :设置或返回当前URL的路径部分。
port :设置或返回当前URL的端口号。
protocol :设置或返回当前URL的协议。
search :设置或返回从问号 (?) 开始的 URL(查询部分)。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
加载新文档 button> < br> < br>
重新加载此文档 button> < br> < br>
替换此文档 button> < br> < br>
< script>
var url = 'https://www.baidu.com' ;
var btn = document. getElementById ( 'loadDoc' ) ;
btn. onclick = function ( ) {
window. location. assign ( url) ;
}
var btn2 = document. getElementById ( 'reloadDoc' ) ;
btn2. onclick = function ( ) {
window. location. reload ( ) ;
}
var btn3 = document. getElementById ( 'replaceDoc' ) ;
btn3. onclick = function ( ) {
window. location. replace ( url) ;
}
window. location. hash = '#yzc111111' ;
console. log ( window. location. hash) ;
console. log ( window. location. href) ;
console. log ( window. location. host) ;
console. log ( window. location. hostname) ;
console. log ( window. location. pathname) ;
console. log ( window. location. protocol) ;
console. log ( window. location. prot) ;
console. log ( window. location. search) ;
script>
body>
html>
点击第一个按钮: 点击第二个按钮: 当前页面重新刷新。
点击第三个按钮: 当前文档替换成了百度首页内容,且不允许后退。
浏览器console控制台:
2.7.3、History对象
History对象保存了用户在浏览器中访问页面的历史记录。可对当前页的浏览历史进行操作,如:前进、后退等。出于安全考虑,不能知道浏览了哪些URL。
常用方法及属性如下:
back():加载history列表中的前一个URL。
forward():加载history列表中的下一个URL。
go():加载history列表中的某个具体页面。
length:返回浏览器历史列表中的URL数量。
History对象权当了解就可以了,用的不多。
2.7.4、Navigator对象
Navigator对象包含浏览器信息。如:获取浏览器名称、版本信息、操作系统平台信息等。调用方式window.navigator或者navigator。
常用属性如下: 常用方法: 示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< script>
console. log ( '浏览器代码名:' + window. navigator. appCodeName) ;
console. log ( '浏览器的次级版本:' + window. navigator. appMinorVersion) ;
console. log ( '浏览器名称:' + window. navigator. appName) ;
console. log ( '浏览器的平台和版本信息:' + window. navigator. appVersion) ;
console. log ( '当前浏览器的语言' + window. navigator. browserLanguage) ;
console. log ( '浏览器是否开启Cookie?' + window. navigator. cookieEnabled) ;
console. log ( '浏览器的cpu等级' + window. navigator. cpuClass) ;
console. log ( '当前系统是否处于脱机状态?' + window. navigator. onLine) ;
console. log ( '运行浏览器的操作系统平台:' + window. navigator. platform) ;
console. log ( 'OS使用的默认语言:' + window. navigator. systemLanguage) ;
console. log ( 'user-agent头部的值:' + window. navigator. userAgent) ;
console. log ( '浏览器是否启用了Java?' + window. navigator. javaEnabled ( ) ) ;
function getBrowserType ( ) {
var browser;
var userAgent = window. navigator. userAgent. toLowerCase ( ) ;
if ( userAgent. indexOf ( 'msie' ) > - 1 ) {
browser = 'IE浏览器' ;
} else if ( userAgent. indexOf ( 'chrome' ) > - 1 ) {
browser = '谷歌浏览器或含有谷歌内核' ;
} else if ( userAgent. indexOf ( 'opera' ) > - 1 ) {
browser = 'opera浏览器' ;
} else {
browser = '未知浏览器' ;
}
return browser;
}
console. log ( '当前浏览器:' + getBrowserType ( ) ) ;
script>
body>
html>
2.7.5、Screen对象
Screen对象包含有关客户端显示屏幕的信息。如获取屏幕高度、宽度等。调用方式window.screen或者screen。
常用属性如下: 示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< script>
console. log ( '显示屏幕宽度:' + window. screen. availWidth) ;
console. log ( '显示屏幕高度:' + window. screen. availHeight) ;
console. log ( '调色板的比特深度:' + window. screen. bufferDepth) ;
console. log ( '调色板的比特深度:' + window. screen. colorDepth) ;
console. log ( '显示屏幕的每英寸水平点数:' + window. screen. deviceXDPI) ;
console. log ( '显示屏幕的每英寸垂直点数:' + window. screen. deviceYDPI) ;
console. log ( '用户是否在显示控制面板中启用了字体平滑:' + window. screen. fontSmoothingEnabled) ;
console. log ( '显示屏幕的宽度:' + window. screen. width) ;
console. log ( '显示屏幕的高度:' + window. screen. height) ;
console. log ( '显示屏幕每英寸的水平方向的常规点数:' + window. screen. logicalXDPI) ;
console. log ( '显示屏幕每英寸的垂直方向的常规点数:' + window. screen. logicalYDPI) ;
console. log ( '显示屏幕的颜色分辨率(比特每像素):' + window. screen. pixelDepth) ;
console. log ( '屏幕的刷新率:' + window. screen. updateInterval) ;
script>
body>
html>
可以看到,大部分属性都不支持。
2.8、例子
模拟导航图自动切换场景,如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
< link rel = " stylesheet" href = " ./css/demo.css" />
head>
< body>
你可能感兴趣的:(前端)
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
笙囧同学
java 前端 状态模式
核心功能设计用户管理系统用户管理是整个系统的基础,我设计了完整的用户生命周期管理:用户注册流程验证失败验证通过验证失败验证通过用户名已存在用户名可用失败成功用户访问注册页面填写注册信息前端表单验证显示错误提示提交到后端后端数据验证返回错误信息用户名唯一性检查提示用户名重复密码加密处理保存用户信息保存成功?显示系统错误注册成功跳转登录页面登录认证机制深度解析我实现了一套企业级的多层次安全认证机制:认
从零到一:打造基于GigaChat AI的艺术创作平台 | 笙囧同学的全栈开发实战
作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:3251736703@qq.com各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯前言在AI技术飞速发展的今天,如何将前沿的大模型技术与实际应用相结合,一直是我们开发者关注的焦点。今天,笙囧同学将带大家从零开始,构建一个基于GigaChatAI的艺术创作平台,实现React前端+Django后端的完整全栈解决方案。这不仅仅是
14.tornado操作之应用Websocket协议实现聊天室功能
孤寒者
Tornado框架从入门到实战 websocket tornado 聊天室功能实现 python
目录:每篇前言:1.什么是WebSocket(1)定义(2)优点(3)和HTTP对比(4)适用场景2.WebSocket关键方法3.本tornado项目中使用WebSocket(1)准备一个聊天室的页面:第一步:编写视图:第二步:编写接口:(app.py中加入以下接口!)第三步:编写前端页面:测试接口——响应OK!(2)使用WebSocket:(3)聊天室的聊天功能的最终实现:第一步:战前准备第二
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
小架构step系列25:错误码
秋千码途
架构 java
1概述一个系统中,可能产生各种各样的错误,对这些错误进行编码。当错误发生时,通过这个错误码就有可能快速判断是什么错误,不一定需要查看代码就可以进行处理,提高问题处理效率。有了统一的错误码,还可以标准化错误信息,方便把错误信息纳入文档管理和对错误信息进行国际化等。没有错误码的管理,开发人员就会按自己的理解处理这些错误。有些直接把堆栈直接反馈到前端页面上,使用看不懂这些信息体验很差,也暴露了堆栈信息有
Java朴实无华按天计划从入门到实战(强化速战版-66天)
岫珩
Java 后端 java 开发语言 学习 Java 时间安排 学习计划
致敬读者感谢阅读笑口常开生日快乐⬛早点睡觉博主相关博主信息博客首页专栏推荐活动信息文章目录Java朴实无华按天计划从入门到实战(强化速战版-66天)1.基础(18)1.1JavaSE核心(5天)1.2数据库与SQL(5天)1.3前端基础(8天)2.进阶(17天)2.1JavaWeb核心(5天)2.2Mybatis与Spring全家桶(6天)2.3中间件入门(4天)2.4实践项目(2天)3.高阶(1
《跨域资源共享CORS的深层逻辑与前端实践精要》
不同源头的资源交互已成为常态,而跨域资源共享(CORS)正是支撑这种交互的隐形架构。现代Web安全体系中平衡开放与防护的精妙设计。理解CORS的深层逻辑,不仅能解决实际开发中的跨域难题,更能触及网络安全与资源流通的核心矛盾,为前端工程师构建稳健的应用提供底层认知支撑。跨域资源共享的诞生,源于网络安全与应用发展的必然冲突。浏览器的同源策略,作为早期网络安全的基石,通过限制不同源文档的交互,有效阻挡了
深入了解 Kubernetes(k8s):从概念到实践
目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带
大厂都在用的前端缓存策略,你掌握了吗?
AI架构全栈开发实战笔记
前端 缓存 ai
大厂都在用的前端缓存策略,你掌握了吗?关键词:前端缓存、HTTP缓存、ServiceWorker、CDN缓存、缓存策略、性能优化、浏览器缓存摘要:本文将深入探讨前端开发中常用的缓存策略,从浏览器缓存到ServiceWorker,从HTTP缓存头到CDN缓存,全面解析大厂都在使用的高效缓存技术。通过生动的比喻和实际代码示例,帮助开发者理解并掌握这些提升Web应用性能的关键技术。背景介绍目的和范围本文
26. 什么是雪碧图,作用和原理了解吗
yqcoder
前端面试-CSS css 前端 html
总结小图合成一张,使用background来使用,减少资源请求一、什么是雪碧图?雪碧图(CSSSprite)是一种前端优化技术,指的是将多个小图标合并成一张大图,通过CSS控制显示其中的某一部分。它常用于网站中图标、按钮等小图较多的场景。二、雪碧图的作用作用说明✅减少HTTP请求次数合并多个图片为一张图,减少请求资源数✅提升页面加载速度尤其在图片较多时效果明显✅避免图片加载闪烁鼠标悬停切换图片时不
H5UI微信小程序前端框架实战指南
ai
本文还有配套的精品资源,点击获取简介:H5UI是一个为微信小程序开发设计的前端框架,基于H5技术,提供简洁高效的组件库。框架集成了丰富的UI元素,如按钮、表格、导航栏等,简化了界面布局和交互的实现。通过安装、引入、使用组件和事件绑定四个步骤,开发者可以轻松构建功能齐全的应用。了解性能优化等注意事项对于高效开发同样重要。1.微信小程序前端开发框架介绍微信小程序概述微信小程序是微信官方推出的一种无需下
Ubuntu安装LAMP
L_h1
测试 ubuntu linux
在安装vim时遇到了一个问题:E:无法获得锁/var/lib/dpkg/lock-frontend-open(11:资源暂时不可用)E:无法获取dpkg前端锁(/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?解决办法:强制解锁sudorm/var/lib/dpkg/lock-frontendsudorm/var/cache/apt/archives/locksud
震惊!DOM变化监控神器MutationObserver,前端开发必知的隐藏武器!
coding随想
JavaScript 前端 javascript html5
一、什么是MutationObserver?如果你是一个前端开发者,一定会遇到这样的场景:页面动态加载内容后,某些操作失效了。比如,你写了一个监听按钮点击的代码,但按钮是通过AJAX动态加载的,你的代码根本无法触发。这个时候,你就需要一个“监控哨兵”——MutationObserver,它能实时监听DOM树的变化,帮你捕获那些“暗中作祟”的节点变动。MutationObserver是HTML5引入
Coze Studio 架构拆解:AI Agent 开发平台项目结构全分析
代码简单说
2025开发必备(限时特惠) 架构 人工智能 Coze Studio 架构 AI Agent 开发平台 全栈 AI 工程化 图解架构
CozeStudio架构拆解:AIAgent开发平台项目结构全分析标签:CozeStudio项目架构、领域驱动设计DDD、全栈开发规范、Hertz框架、前后端协作、云原生容器、前端测试、IDL接口设计、微服务解耦、AI开发平台源码分析在最近研究AIAgent开发平台的过程中,我深入分析了刚刚开源的CozeStudio项目。这套系统是国内少有的开源全栈AI工程化项目,代码整洁、架构先进,特别是它基于
关于前端的性能优化
性能优化主要涵盖了以下四个方面:(tip:仅代表个人总结,如有不当,还希望看到的大佬多多指示)减少网络请求:合并文件、使用CDN、启用缓存。优化资源加载:代码分割、懒加载、图片压缩。提升渲染性能:减少重绘回流、防抖节流、使用WebWorker。监控和迭代:定期使用工具检测性能,持续优化。一、网络层面优化减少HTTP请求合并文件:将多个CSS或JavaScript文件合并成一个,减少请求次数。使用C
linux网卡显示未知未托管,linux有线网络显示设备未托管
NetworkManagerNetworkManager是为了使网络配置尽可能简单而开发的网络管理软件包,如果使用DHCP,NetworkManager会替换默认的路由表、从DHCP服务器获取IP地址并根据情况设置域名服务器,NetworkManager的目标是使网络能够开箱即用。NetworkManager由两部分组成:一个以超级用户运行的守护进程(network-manager);一个前端管理
页面开发样式和布局入门:Vite + Vue 3 + Less
页面开发样式和布局入门:Vite+Vue3+Less引言在现代前端开发中,样式和布局是页面开发的核心部分。随着技术的不断发展,Vite、Vue3和Less等工具和框架的出现,使得前端开发变得更加高效和灵活。然而,尽管这些工具和框架提供了强大的功能,但在实际开发中仍然会遇到各种样式和布局的问题。本文将结合Vite、Vue3和Less,详细介绍在页面开发中常见的样式和布局问题,并提供解决方案和最佳实践
推客系统小程序机构版开发上线全攻略(2025年最新版)
vx_qutudy
推客小程序 推客系统开发 推客系统源码
一、开发前准备:筑牢基础,合规先行1.1注册与认证账号注册:登录微信公众平台注册小程序账号,选择“机构版”类型,获取唯一AppID。资质认证:基础资质:企业营业执照、法人身份证、对公账户信息。特殊资质:涉及支付功能:需办理《增值电信业务经营许可证》(ICP证)。涉及教育/医疗内容:需《互联网信息服务许可证》或相关行业资质。1.2技术选型:高效与扩展并重模块推荐方案前端框架微信原生框架(WXML+W
网络安全第14集
不灭锦鲤
web安全 安全
前言:小迪安全14集,这集重点内容:0、什么是js渗透测试?在javascript中也存在变量和函数,存在可控变量和函数就有可能存在在漏洞,js开发的web应用和php、java开发的区别是,js能看得到的源代码,php看不到,但是风险就是未授权访问、配置信息泄露(加密算法、key秘钥等),源代码看得到,存在更多的url泄露,从而可能会出现未授权访问,从url,前提:web应用可以采用前端语言或后
怎么判断一个DAPP是否真正去中心化
判断一个DAPP(去中心化应用)是否真正去中心化,需要从多个维度进行考察。以下是关键评估标准:1.区块链依赖程度✅真正去中心化:核心逻辑和数据处理完全依赖智能合约,运行在区块链上(如以太坊、Solana等)。❌伪去中心化:依赖中心化服务器处理关键数据或业务逻辑,仅前端去中心化。2.智能合约控制权✅去中心化:合约代码开源,无管理员密钥(adminkey)或可升级后门,治理由DAO(去中心化自治组织)
Web前端交互利用Python跟大模型操作
哥本哈士奇
前端 交互 python
Web前端交互利用Python跟大模型操作一个简单的演示,如何把大模型应用集成到自己的应用场景当中。这里的场景我们模拟的是在吃鸡游戏中,一个作战计划,是否符合老六的行为规范。吃鸡游戏已经风靡很多年,游戏里每个人的游戏风格都不一样,有喜欢钢枪的,有喜欢随机应变的,也有喜欢当老六苟分的。每种风格的游戏方式以及游戏里的行为都不同,所以这里将演示如何应用大模型,去判断一个人的游戏方式,是否符合一个老六的行
尚硅谷微服务尚医通前端npm报错
尚硅谷微服务尚医通前端npm报错血泪史我的版本的8.0.0,弹幕里说降级npm到6.多就能安装,经过许久挣扎还是各种报错,最后通过一下办法解决解决办法:不需要降低npm版本,办法如下这里需要使用到cnpm:1.导入下载好到的项目2.安装cnpm:npminstallcnpm-g3.安装node-sass:cnpminstallnode-sass4.继续安装:cnpminode-sass-D5.删除
Layui核心语法快速入门指南
bemyrunningdog
layui 前端 javascript 开发语言
Layui基本语法学习指南Layui是一个经典的模块化前端框架,以其轻量易用、组件丰富著称。以下是Layui的核心语法结构和使用方法:一、模块加载机制(核心基础)//标准模块加载语法layui.use(['module1','module2'],function(){//回调函数中获取模块varmod1=layui.module1;varmod2=layui.module2;//模块功能调用mod
前端基础知识Vue3系列 - 04(Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同)
开始之前CompositionAPI可以说是Vue3的最大特点,那么为什么要推出CompositionApi,解决了什么问题?通常使用Vue2开发的项目,普遍会存在以下问题:代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺点TypeScript支持有限以上通过使用CompositionApi都能迎刃而解正文一、OptionsApiOptionsAPI,即大家常说的选项API,即以vue
Vue 工程化开发入门
dawn191228
前端学习 vue.js 前端 javascript 前端框架
文章目录一、Vue工程化开发概述二、Vue脚手架三、项目运行流程四、组件化开发五、组件注册六、总结在当今的前端开发领域,Vue.js以其简洁、高效的特性受到了广泛的欢迎。Vue的工程化开发能够帮助我们更好地组织和管理项目,提高开发效率和代码质量。本文将带你了解Vue工程化开发入门知识,包括脚手架、项目运行流程、组件化以及组件注册。一、Vue工程化开发概述工程化开发是一种将软件开发过程规范化、标准化
Python,C++,go语言开发社会犯罪人群回归社会跟踪与辅助管理APP
Geeker-2025
python c++ golang
开发一款用于**社会犯罪人群回归社会跟踪与辅助管理**的App,结合Python、C++和Go语言的优势,可以实现高效的数据处理、实时的跟踪监控以及用户友好的前端界面。以下是一个详细的开发方案,涵盖技术选型、功能模块、开发步骤等内容。##技术选型###后端(Python+Go)-**编程语言**:-**Python**:用于数据处理、机器学习(如风险评估、行为预测)、脚本编写等。-**Go**:用
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite
iwindyforest
vmware mac os 10.10 workstation player
最近尝试了下VMware下安装MacOS 系统,
安装过程中发现网上可供参考的文章都是VMware Workstation 10以下, MacOS X 10.9以下的文章,
只能提供大概的思路, 但是实际安装起来由于版本问题, 走了不少弯路, 所以我尝试写以下总结, 希望能给有兴趣安装OSX的人提供一点帮助。
写在前面的话:
其实安装好后发现, 由于我的th
关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?
deathwknight
JavaScript java 框架
本人从学习Java开发到现在已有10年整,从一个要自学 java买成javascript的小菜鸟,成长为只会java和javascript语言的老菜鸟(个人邮箱:deathwknight@163.com)
一路走来,跌跌撞撞。用自己的三年多业余时间,瞎搞一个小东西(基于模型驱动的B/S在线开发平台,非MVC框架、非代码生成)。希望与大家一起分享,同时有许些疑虑,希望有人可以交流下
平台
如何把maven项目转成web项目
Kai_Ge
maven MyEclipse
创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl
主管???
Array_06
工作
转载:http://www.blogjava.net/fastzch/archive/2010/11/25/339054.html
很久以前跟同事参加的培训,同事整理得很详细,必须得转!
前段时间,公司有组织中高阶主管及其培养干部进行了为期三天的管理训练培训。三天的课程下来,虽然内容较多,因对老师三天来的课程内容深有感触,故借着整理学习心得的机会,将三天来的培训课程做了一个
python内置函数大全
2002wmj
python
最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu
JSP页面通过JQUERY合并行
357029540
JavaScript jquery
在写程序的过程中我们难免会遇到在页面上合并单元行的情况,如图所示
如果对于会的同学可能很简单,但是对没有思路的同学来说还是比较麻烦的,提供一下用JQUERY实现的参考代码
function mergeCell(){
var trs = $("#table tr");
&nb
Java基础
冰天百华
java基础
学习函数式编程
package base;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// Integer a = 4;
// Double aa = (double)a / 100000;
// Decimal
unix时间戳相互转换
adminjun
转换 unix 时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135
作为一个合格程序员该做的事
aijuans
程序员
作为一个合格程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多
2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重
由html5视频播放引发的总结
ayaoxinchao
html5 视频 video
前言
项目中存在视频播放的功能,前期设计是以flash播放器播放视频的。但是现在由于需要兼容苹果的设备,必须采用html5的方式来播放视频。我就出于兴趣对html5播放视频做了简单的了解,不了解不知道,水真是很深。本文所记录的知识一些浅尝辄止的知识,说起来很惭愧。
视频结构
本该直接介绍html5的<video>的,但鉴于本人对视频
解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat
bewithme
httpclient
如果你构建了一个https协议的站点,而此站点的安全证书并不是合法的第三方证书颁发机构所签发,那么你用httpclient去访问此站点会报如下错误
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu
Jedis连接池的入门级使用
bijian1013
redis redis数据库 jedis
Jedis连接池操作步骤如下:
a.获取Jedis实例需要从JedisPool中获取;
b.用完Jedis实例需要返还给JedisPool;
c.如果Jedis在使用过程中出错,则也需要还给JedisPool;
packag
变与不变
bingyingao
不变 变 亲情永恒
变与不变
周末骑车转到了五年前租住的小区,曾经最爱吃的西北面馆、江西水饺、手工拉面早已不在,
各种店铺都换了好几茬,这些是变的。
三年前还很流行的一款手机在今天看起来已经落后的不像样子。
三年前还运行的好好的一家公司,今天也已经不复存在。
一座座高楼拔地而起,
【Scala十】Scala核心四:集合框架之List
bit1129
scala
Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解
1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量
2. 给变量赋值(注意val关键字,a,b
Nested Functions in C
bookjovi
c closure
Nested Functions 又称closure,属于functional language中的概念,一直以为C中是不支持closure的,现在看来我错了,不过C标准中是不支持的,而GCC支持。
既然GCC支持了closure,那么 lexical scoping自然也支持了,同时在C中label也是可以在nested functions中自由跳转的
Java-Collections Framework学习与总结-WeakHashMap
BrokenDreams
Collections
总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。
强引用:就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集
读《研磨设计模式》-代码笔记-解释器模式-Interpret
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 解释器(Interpreter)模式的意图是可以按照自己定义的组合规则集合来组合可执行对象
*
* 代码示例实现XML里面1.读取单个元素的值 2.读取单个属性的值
* 多
After Effects操作&快捷键
cherishLC
After Effects
1、快捷键官方文档
中文版:https://helpx.adobe.com/cn/after-effects/using/keyboard-shortcuts-reference.html
英文版:https://helpx.adobe.com/after-effects/using/keyboard-shortcuts-reference.html
2、常用快捷键
Maven 常用命令
crabdave
maven
Maven 常用命令
mvn archetype:generate
mvn install
mvn clean
mvn clean complie
mvn clean test
mvn clean install
mvn clean package
mvn test
mvn package
mvn site
mvn dependency:res
shell bad substitution
daizj
shell 脚本
#!/bin/sh
/data/script/common/run_cmd.exp 192.168.13.168 "impala-shell -islave4 -q 'insert OVERWRITE table imeis.${tableName} select ${selectFields}, ds, fnv_hash(concat(cast(ds as string), im
Java SE 第二讲(原生数据类型 Primitive Data Type)
dcj3sjt126com
java
Java SE 第二讲:
1. Windows: notepad, editplus, ultraedit, gvim
Linux: vi, vim, gedit
2. Java 中的数据类型分为两大类:
1)原生数据类型 (Primitive Data Type)
2)引用类型(对象类型) (R
CGridView中实现批量删除
dcj3sjt126com
PHP yii
1,CGridView中的columns添加
array(
'selectableRows' => 2,
'footer' => '<button type="button" onclick="GetCheckbox();" style=&
Java中泛型的各种使用
dyy_gusi
java 泛型
Java中的泛型的使用:1.普通的泛型使用
在使用类的时候后面的<>中的类型就是我们确定的类型。
public class MyClass1<T> {//此处定义的泛型是T
private T var;
public T getVar() {
return var;
}
public void setVa
Web开发技术十年发展历程
gcq511120594
Web 浏览器 数据挖掘
回顾web开发技术这十年发展历程:
Ajax
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a
openSession()与getCurrentSession()区别:
hetongfei
java DAO Hibernate
来自 http://blog.csdn.net/dy511/article/details/6166134
1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。
这里getCurrentSession本地事务(本地
第一章 安装Nginx+Lua开发环境
jinnianshilongnian
nginx lua openresty
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒
HSQLDB In-Process方式访问内存数据库
liyonghui160com
HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。
先睹为快!
下面是一个In-Process方式访问内存数据库的代码示例:
下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8)
import java.s
Java线程的5个使用技巧
pda158
java 数据结构
Java线程有哪些不太为人所知的技巧与用法? 萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常
工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法。比如说线程。没错,就是线程。或者确切说是Thread这个类。当我们在构建高可扩展性系统的时候,通常会面临各种各样的并发编程的问题,不过我们现在所要讲的可能会略有不同。
开发资源大整合:编程语言篇——JavaScript(1)
shoothao
JavaScript
概述:本系列的资源整合来自于github中各个领域的大牛,来收藏你感兴趣的东西吧。
程序包管理器
管理javascript库并提供对这些库的快速使用与打包的服务。
Bower - 用于web的程序包管理。
component - 用于客户端的程序包管理,构建更好的web应用程序。
spm - 全新的静态的文件包管
避免使用终结函数
vahoa.ma
java jvm C++
终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。
我自己总结了一下这一条的综合性结论是这样的:
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方