JavaScript笔记

第一章  JavaScript 简介

1.1  什么是JavaScript

1.1.1  JavaScript 的诞生

        1995年,由网景公司聘请的程序员Brendan Eich开发了JavaScript。

JavaScript笔记_第1张图片

1.1.2  JavaScript 与 Java 的关系

        网景公司这种浏览器脚本最初叫 Mocha。

        1951年9月改名为LiveScript。同年12月,网景公司与Sun公司达成协议,后者允许将这种语言叫做JavaScript。

        1996年3月网景浏览器(现火狐浏览器)2.0浏览器正式内置JavaScript脚本语言。 

                                         

JavaScript笔记_第2张图片

                                    

1.1.3  为什么学习 JavaScript

        JavaScript语言的特点:

JavaScript笔记_第3张图片

        (1)简单性

        JavaScript语法简单,很多语法借鉴Java和C++的语法。除了语法简单外JavaScript的开发环境也简单,只需要 文本编辑器就可以编写JavaScript程序。它不需要对开发环境做过多的配置,快速入门是这种语言的最大特点。

        (2)安全性

        JavaScript语言主要是用来完成浏览器与访问者之间的交互效果,并不会涉及数据存储服务器、网络文档修改或删除等功能。JavaScript 本身没有操作数据的功能,所以说学习JavaScript 这门语言本身是“非常安全”的。

        (3)广泛性

        JavaScript可以应用于被浏览器解析的Web端,也可以作为后端语言使用,还可以用于构建移动端APP等。此外JavaScript还可以用来构建桌面应用,世界上最流行的2D游戏引擎之一Cocos2d和最流行的3D游戏引擎之一Unity3D均可以由JavaScript来开发。

        (4)开放性

        JavaScript属于客户端脚本语言,可以在浏览器中直接查看其源代码,对于学习和借鉴都很有帮助,可以说JavaScript这门语言具有完全的开放性。

1.2  JavaScript的特性

1.2.1  语言特性

        JavaScript 语言特性如图所示:

JavaScript笔记_第4张图片

        (1)解释型 

        编译型语言在计算机运行代码前,先把代码翻译成计算机可以理解的文件,如 Java、C++等属于编译型语言;而解释型语言则不同,解释型语言的程序不需要在运行前编译,只需在运行程序时编译即可,如:JavaScript、PHP 等属于解释型语言。

        解释型语言的优点是可移植性比较好,只要有解释环境,可在不同操作系统上运行。代码修改后即可运行,无序编译,上手方便、快速。但缺点是需要解释环境,运行起来比编译型语言满,占用资源多,代码效率低。

        (2)弱类型

        弱类型语言是相对强类型语言而言的。在强类型语言中,变量类型有很多种,如 int、char、float、boolean 等,不同的类型相互转换有时需要强制转换。而 JavaScript 只有一种类型 var,当其为变量赋值时会自动判断类型并转换,因此 JavaScript 是弱类型语言。

        弱类型语言的优点是易于学习、语言表达简单易懂、代码更优雅、开发周期更短、更加偏向逻辑设计。缺点是程序可靠性差、调试繁琐、变量不规范、性能低下。

        (3)动态性

        动态性语言是指在变量定义时不一定进行赋值操作,只需在使用时作赋值操作即可。这种方式使得代码更灵活、方便。在 JavaScript 中有多处会用到动态性,如获取元素、原型等。

        (4)事件驱动性

        JavaScript 可以直接对用户或客户输入做出响应,无须经过 Web 程序。它对用户的响应以事件驱动的方式进行,即由某种操作动作引起相应的事件响应,如单击、拖动窗口、选择菜单等。

        (5)跨平台性

        JavaScript 依赖于浏览器本身,与操作环境无关。只要计算机上可以运行浏览器,并且浏览器支持 JavaScript,即可正确执行,从而实现"编写一次,走遍天下"。

1.2.2  JavaScript 与 ECMAScript 的关系 

        ECMAScript 和JavaScript 的关系为前者是后者的规范,后者是前者的实现。

1.2.3  JavaScript 与 HTML 和 CSS 的关系

        JavaScript 语言主要用来完成浏览器与访问者之间的交互效果,需要与HTML、CSS配合使用,三者就像板凳的三条腿,缺一不可。Web 前端三大核心技术的关系,如图所示。

JavaScript笔记_第5张图片

        如果想要对JavaScript语言有更深入的理解,需要对HTML和CSS有一定的认知。 那么,三者是如何进行分工的呢?下面用一个盖 房子的例子来描述三者之间的关系,首先需要把房子 的地基和骨架搭建好,即良好的结构(HTML);然后给房子刷上油漆和添加窗户,对房子样式进行美化(CSS);最后给房子添加电梯和地暖,与住户进行一些行为上的交互(JavaScript),这样房子才算搭建完毕。总而言之,首先通过 HTML 搭建网页的结构,然后用CSS设置网页的样式,最后通过 JavaScript 添加网页的交互效果,从而完成整个前端的开发过程。

        具体分工如下:HTML 负责结构、CSS负责样式、JavaScript负责行为。根据 W3C组织规定的Web 标准,应该尽可能地让三者进行分离式开发,最后再整合到一起,从而实现最终的效果。

1.2.4  JavaScript 的组成

        JavaScript 的组成包含三大部分,分别为 ECMAScript、DOM和BOM。JavaScript的组成如图1.6所示。

JavaScript笔记_第6张图片

         1. ECMAScript

         ECMAScript 是 JavaScript 语言的规范,是 JavaScript 的核心内容,它描述了语言的基本语法和数据类型等。ECMAScript 是一套标准,规范了 JavaScript 编码方式与语言特性。

         2. DOM

        文档对象模型(Document Object Model,DOM)是 W3C 组织推荐的处理可扩展标记语言(HTML或XML)的标准编程接口(API)。网页上组织页面(或文档)的对象被组织在一个树形结构中,通过DOM操作的方式可以让页面跟JavaScript进行通信交互。DOM树展示,如图1.7所示。

JavaScript笔记_第7张图片

         通俗地说,DOM就是获取或设置HTML和CSS代码的功能实现。通过下面的示例可以看出HTML页面的每个部分都是一个节点的衍生物,具体示例代码如下:



	
		
		demo
	
	
		

hello JavaScript!

         DOM通过创建树来表示文档中所有的标签结构(即节点),从而使开发者对文档的内容和结构具有空前的控制力。用 DOM API 可以轻松地删除、添加和替换节点。

         3.BOM

        浏览器对象模型(Browser Object Model,BOM)是对浏览器窗口进行访问和操作的 功能接口。例如,弹出新的浏览器窗口、获取浏览器信息等。注意,BOM 是作为 JavaScript 的一部分而不是作为 W3C 组织的标准,每款浏览器都有自己的实现方式,这会导致 BOM 代码的兼容性不如ECMAScript 和 DOM 代码的兼容性。

1.3  编写第一个JavaScript程序

1.3.1  JavaScript 编辑工具

· Dreamweaver,它是由Adobe公司出品。

· Sublime Text,它是由程序员 Jon Skinner开发的。

· WebStorm,它是由JetBrains公司出品。

· HBuilder,它是由DCloud公司出品。

1.3.2  JavaScript 在 HTML 的引入方式

        CSS在HTML 中有三种引入方式,JavaScript与CSS在HTML 中的引入方式完全相同,如下所示。

        1.行间引入方式(行内式)

行间引入方式是通过HTML标签的属性进行操作,一般不推荐使用,因为它违背了Web标准中规定的结构、样式、行为三者分离开发的原则,接下来通过案例演示行间JavaScript展示效果,具体如例1-1所示。

         【例1-1】 行间JavaScript展示效果。



	
		
		编写第一个JavaScript程序
	
	
		
单击

        运行结果如图:

JavaScript笔记_第8张图片

         在 Chrome 浏览器下运行上面的代码,当单击<div>标签时,会弹出一个提示窗口,显示设置的文本内容。其中onclick属性表示单击相应事件,alert()表示弹出窗口方法,括号中的内容为弹出内容。

        2.内部引入方式(内嵌式)

        内部引入方式是通过<script>标签的方式进行设置,类似于CSS中的<style>标签引入方式,接下来通过案例演示内部 JavaScript 展示效果,具体如例1-2所示。

         【例1-2】 内部JavaScript展示效果。



	
		
		编写第一个JavaScript程序
	
	
		
	

        运行结果图:

JavaScript笔记_第9张图片

         

3.外部引入方式(外链式)

        外部引入方式,也是通过<script>标签的方式进行设置,但引入的是一个外部JavaScript文件,通过 src 属性引入链接的地址。类似于 CSS 中的<link>标签引入方式,具体示例代码如下:

         执行代码和展示效果都与内部引入方式类似,只是采用一个外部的 JavaScript 文件,这样可以在多个页面中共享同一段 JavaScript 代码。

1.3.3  注释、空格、分号

         JavaScript 中的注释分为单行代码注释和多行代码注释两种,下面将分别介绍这两种注释方式。

        单行注释:

        多行注释:

1.3.4  JavaScript 调试控制台

        一般情况下,可以利用 alert()方式打印 JavaScript 计算后的值,从而进行程序的测试。但alert()方式会阻止后续代码的执行,连续测试会很不方便。JavaScript中提供了另外一种测试方式,即console.log()方式。此方式与alert)类似,可以打印出相关的值,但二者的区别在于console.log()方式不会阻止后续代码的运行。因此,console.log()方式适合做连续的输出操作。         如果想要查看 console.log()方式打印的数据值,需要通过浏览器自带的调试控制台打印输出。例如Chrome浏览器,按F12键即可打开调试控制台。接下来通过案例演示Chrome浏览器调试控制台,具体如例1-3所示。

       【例1-3】 Chrome 浏览器调试控制台。



	
		
		编写第一个JavaScript程序	
	
	
		
	

        运行效果: 

JavaScript笔记_第10张图片

         首先编写例1-3,然后在Chrome浏览器中运行当前案例,运行后再按F12键,打开Chrome 浏览器内置的调试工具,然后选择 Console选项,即可以查看到例1-3中console.log()语法中的代码信息。

        如果尝试添加多个 console.log()代码输出,可以看到同时执行多条语句。但是如果尝试添加多个alert()代码输出时,只会弹出一个提示框,只有当单击提示框的"确认"按钮后,才会执行下一次的弹窗提示。

第二章  JavaScript 基本语法

2.1  变量

2.1.1  关键字与保留字

        在 JavaScript 中提供了很多关键字,每个关键字都具有特定的用途,因此,不能将这些关键字定义为变量名。JavaScript常见关键字如下表:

JavaScript中常见的关键字
break do instanceof var
case else new void
catch finally return while
continue for swith with
debugger function this delete
default if throw
in try typeof

        除上表中的关键字,还有部分单词不能用作变量的命名。JavaScript 语言的部分语法在当前版本中可能并未得到使用,但是很可能出现在后续版本中,通常将这部分语法称为 JavaScript 中的保留字。JavaScript中的保留字如下表所示:

JavaScript中的保留字
abstract enum int short
boolean export interface static
byte extends long super
char final native synchronized
class float package throws
const goto private transient
double import public

        在定义变量名时,应尽量避免出现 JavaScript 关键字与保留字。本质上来讲,关键字与保留字为同一概念,但在JavaScript 中,关键字是指已经被系统使用的保留字,而保留字是指未被系统使用的关键字。

2.1.2  命名规则

        JavaScript变量名命名要遵循一定的规则,其具体规则如下:

         · 不能是关键字或保留字。

         · 第一个字符,可以是任意字母、下画线(_)、美元符($)。

         · 第二个字符及后面的字符,除了字母、美元符号和下画线,还可以用数字0~9。

         · 中文是合法的变量名,但应尽量避免使用。

         下面通过示例演示 JavaScript 命名规则,具体示例代码如下:

var for = '';            //✘(for为关键字)
var enum = '';           //✘(enum为保留字)
var 1foo = '';           //✘(第一个字符不能是数字)
var $foo = '';           //√ 
var _foo = '';           //√ 
var 苦艾酒 = '';         //√(尽量不用中文命名)

        在定义变量时,可以采用一些常见的命名法,具体方法如下:

         · 驼峰命名法:第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写。

         · 匈牙利命名法:开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩 写,要求单词第一个字母大写(类型将在后面章节中进行讲解)。

         · 下画线命名法:通过下画线连接多个单词。

         下面分别用三种常见的命名方法进行命名,具体示例代码如下:

var fooBar = '';         //驼峰命名法
var sFoo = '';           //匈牙利命名法
var foo_bar = '';        //下划线命名法
2.1.3  规范与简写

        在 JavaScript 中定义变量,分为显式声明和隐式声明,其中显式声明通过 var 的方式定义,而隐式声明则不需要通过var的方式定义。具体示例代码如下:

var foo = '';        //显式变量
var bar = '';        //隐式变量

        在JavaScript规范中规定,所有变量必须均采用式声明的方式定义,这样才能避免出现隐式定义变量。 JavaScript语言的代码是严格区分大小写的,因此,下面示例代码表示了两个不同的变量,具体示例代码如下:

var foo = '';
var Foo = '';

        当定义多个变量时,可以分别进行定义,也可以通过简写的方式进行定义,用逗号隔开多个变量。具体示例代码如下:

var foo = '',bar = ''; //简单定义 foo 和 bar

        通常可能会遇到一种错误的写法,具体示例代码如下:

var foo = bar = '';

2.2  数据类型

         在 JavaScript 语言中把变量值也进行了划分,划分出来的不同类型值,称为数据类型。 

2.2.1  类型划分

         JavaScript 的数据类型分为 number、string、boolean、object、undefined、null 六种。

        1.number

        number类型表示数字类型,用于存储数字。数字可分为整型(int)和浮点型(float),整型用于表示整数,浮点型用于表示小数。具体示例代码如下:

var foo = 123;   //数字类型的整型
var bar = 3.14;  //数字类型的浮点型

         2. string 

         string 类型表示字符串类型。字符串是由 Unicode 字符集子集构成的序列,在 JavaScript 中用来表示文本的数据类型。具体示例代码如下:

var foo = 'hello';    //字符串类型
var bar = '123';      //字符串类型

        注意,字符串类型的值必须添加引号,如:'123' 表示字串类型,而 123 则表示数字类型。引号可以是单引号也可以是双引号,一般采用单引号定义 JavScript中的字符串,而双引号一般用于定义HTML的属性值。

        3. boolean

        boolean类型表示布尔值类型,布尔值表示真假值,只有两个可选值,即真值(true)和假值(false)。具体示例代码如下:

var foo = true;    //布尔类型值
var bar = false;    //布尔类型值

        4.object

        object类型表示对象类型,对象是各种值的集合。在后面章节中涉及的数组、函数、各种内置对象都属于对象类型。在后面章节中将会对对象进行详细的讲解,这里了解即可。

        5. undefined

        undefined类型表示未定义类型,如果 var 关键字声明一个变量,但并没有对其进行赋值,则无法判断变量的数据类型,此时变量数据类型是 undefined,具体示例代码如下:

var foo;    //未定义类型

         6.null

        null类型表示空类型,表示当前为空值,具体示例代码如下:

var foo = null;    //空类型

        可以发现,undefined 与 null 有些类似,null 表示一个变量被赋予了一个空值,而undefined则表示该变量尚未被赋值。

        7.其他类型

        数据类型还可划分为原型类型、合成类型、特殊类型三大类。

        (1)原始类型包括:number、string、boolean。

        (2)合成类型包括:object。

        (3)特殊类型包括:undefined、null。 

2.2.2  类型判断

       在 JavaScript 中判断数据类型的方法有三种。本节只介绍第一种方法,通过 typeof 语法判断数据类型,具体示例代码如下:

typeof 123;         //number
typeof '123';       //string
typeof true;		//boolean
typeof {};			//object
typeof [];			//object
typeof undefined;	//undefined
typeof null;		//object

        需要注意 null 值不会返回 null 类型,而是返回object类型。因为在最初的 JavaScript 版本中,只有五种类型,没有null类型,空值是在object类型下定义的,所以 typeof null 会返回 object 类型,而这个问题一直延续至今。虽然 typeof 判断不出 null 类型,但可以采用另外两种判断方法。另外两种判断方法将在后面章节中进行讲解,这里不再赘述。

2.2.3  类型转换

        数据的类型是可以发生改变的,在 JavaScript 中改变数据类型的方式有显式类型转换和隐式类型转换两种方法,下面分别讲解这两种类型转换的方法。

        1.显式类型转换

        显式类型转换是通过具体的方法,手动地进行转换的方式。Number()方法是把变量转换成数字类型;String()方法是把变量转换成字符串类型;Boolean() 方法是把变量转换成布尔值类型。具体示例代码如下:

var foo = '1';
var bar = 2;
var baz ='hi';
Number(foo);		//1
alert(typeof(Number(foo)));	//number
String(bar);		//'2'
alert(typeof(String(bar)));	//string
Boolean(baz);		//true
alert(typeof(Boolean(baz)));//boolean

        从上述示例代码中可以发现,foo、bar、baz  的原始值并不会改变,只有调用显式类型方法时才改变,当然在 JavaScript 中改变数据类型的方法并不止三种方法,这里只是介绍什么是类型转换,在后面的章节中会讲解一些常用的类型转换方法。

         注意:当一个变量不能转成数字类型时,会返回 NaN。NaN 表示变量值不是数字,但其类型却是数字类型。具体示例代码如下:

var baz = 'hi';
Number(baz);	//NaN
alert(typeof Number(baz));	//number
baz		//'hi'

         2.隐式类型转换

        隐式类型转换是通过运算的方式,自动进行转换的方式。在 JavaScript 中有很多隐式类型转换的方法,这里只作简单介绍,后面章节中也会涉及相关转换的方法。 当数字与字符串相乘时,会自动地把字符串转成数字类型,然后计算出结果。当数字与布尔值相乘时,会自动地把布尔值转成数字类型,true会转成1,false会转成0,然后计算出结果。具体示例代码如下:

2 * '3';    //6
2 * true;    //2

        需要注意+运算符,+除了表示加法,还表示连接。因此当数字与字符串相加时,实际上是要连接两个变量,并不会发生隐式类型转换,而其他运算符不表示连接,可以进行隐式类型转换。具体示例代码如下:

2 + '3';    //23

        前面介绍过undefined 与 null 的区别,undefined 表示未定义,而 null 表示已经定义,其值为空。因此,当隐式类型转换时,undefined 不可以转换为数字,而null可以转换成0。具体示例代码如下:

2 * undefined;    //NaN
2 * null;    //0
2.2.4  类型比较 

        数据类型可以转换,同样也可以用来比较,在后面小节中将介绍比较运算符 ==、=== 。其中,== 运算符左右变量进行比较时,值相同,类型可以不同;而 === 运算符左右变量进行比较时,值相同而且类型也要相同。具体示例代码如下:

2 == '2';    // true
2 === '2';    // false

        还有几个特殊的比较,undefined 与 null 比较时会返回 true ;与 NaN 比较时,则会返回 false。具体示例代码如下:

undefined == null;    // true
undefined === null;    // false
NaN == NaN;    // false
NaN === NaN;    // false

        注意,NaN 与任何值比较都会返回 false,包括它自身。这也属于 JavaScript 的历史原因。因为,当时的语法不够严谨,延续至今。JavaScript 语言是一门极其灵活的语言,在很多地方不严谨,需要更多的实践与总结。

        除上述规则外,类型比较时还有许多地方需要注意,后面小节会进行详细分析。

2.3  运算符

2.3.1  算术运算符

        算术运算符用于在程序中进行加、减、乘、除等运算。在 JavaScript 中算术运算符一共有九种,如表所示:

算数运算符
运算符 描述 示例
+ 2+3=5
- 5-2=3
* 2*3=6
/ 6/3=2
% 取模 7%4=3
++ 自增 ++1  // 2
-- 自减 --1  // 0
+ 数值 +1  // 1
- 负数值 -1  // -1

        加、减、乘、除运算符比较简单,这里将重点讲解取模运算符。使用取模运算时需要注意,当被除数小于除数取模时,模为被除数本身。具体示例代码如下:

3%5=3

        自增运算符(++)和自减运算符(--)是对数值进行加 1 或减 1 的操作,会改变原始数值的大小。具体示例代码如下:

var foo = 1;
++foo;        // 2
foo;        // 2

        对于自增和自减运算符需要注意一点,当运算符放在变量之后时,会先返回变量操作前的值,再进行自增或自减操作:当运算符放在变量之前时,会先进行自增或自减操作,再返回变量操作后的值。具体示例代码如下:

var foo = 1;
var bar = 1;
foo++;        // 1
++bar;        // 2

        上面代码中,foo 是先返回当前值,然后再自增,因此得到 1 ; bar 是先自增,然后再返回新的值,因此得到 2 。 数值运算符(+)和负数值运算符(-)的作用可以将任何值转为数值(与Number 函数的作用类似),一般用于显式类型转换中。数值运算符会返回一个新的值,而不会改变原始变量的值。具体示例代码如下:

var foo = '2';
+foo;        // 2
typeof +foo;        // number
foo;
typeof foo;        // string
2.3.2  赋值运算符

        JavaScript 中的赋值运算符分为简单赋值运算符和复合赋值运算符两种,下面分别介绍这两种赋值运算符。

1.简单赋值运算符

        将赋值运算符( = )右边表达式的值保存到左边的变量中。具体示例代码如下:

var foo = 1;        // 简单赋值运算符
var bar = 2;        // 简单赋值运算符

 2.复合赋值运算符

        结合了其他操作( 如算术运算操作)和赋值操作。具体示例代码如下:

var foo = 1;
foo += 4;        // 复合赋值运算符,等阶于 foo = foo + 4;

       += 的方式是一种简写的运算方式,除了 += 外,还有*=、/=、-=、%=等常见写法。

2.3.3  比较运算符

        比较运算符用于比较两个值,返回一个布尔值,表示是否满足比较条件。满足条件返回true,不满足条件返回 false。在 JavaScript 中一共有八种比较运算符,如表所示。

比较运算符
运算符 描述 示例
== 相等 2==3        // false
=== 严格相等 2==='2'        // false
!= 不相等 2!=3        // true
!== 严格不相等 2!='2'        // true
< 小于 7<4        // false
<= 小于或等于 7<=4        // false
> 大于 7>4        // true
>= 大于或等于 7>=4        // true

        在前面的小节中介绍过类型的转换方式,当不同类型进行比较时,先把左右类型转成数字类型,然后再进行比较,具体示例代码如下:

12 == '12';        // true    '12'转化为数字12
1 == true;        // true    true转变成数字1
0 == null;        // true    null转变成数字0
2 > true;        // true    true转变成数字1
5 < '12';        // ture    '12'转变成数字12

        但需要注意一条规则,当比较的两个值都是字符串类型时,不会按照上面的规则进行转化,而是按照字符串每一位的 Unicode 码点进行比较,例如,字符串a的码点为97、字符串b的码点为98,因此,a小于b,具体示例代码如下:

'a' < 'b';        // true    'a'转变成97,'b'转变成98
'5' > '12';        // true    '5'转成5,'1'转成1
5 > '12';        // false    '12'转成数字12

        从上述示例可以发现,当字符串出现多位时,是按照一位一位进行比较的,因此,当 '5'> '12' 比较时,是字符串 5 与字符串 1 先进行比较。 在前面介绍数据类型比较时,介绍了 == 和 === 两个运算符,两者的区别是 == 运算符表示值相等,类型可以不相同,而 === 运算符表示值相等而且类型也相同。具体示例代码如下:

12 == '12';        // true    值相同,所以相等
12 === '12';        // false    值相同但类型不相同,所以不相等

        不等运算符同样适用于此规则,具体示例代码如下:

6 !== '6';        // false    值相同,所以相等
6 !=== '6';        // true    只相等但类型不同,所以不相等

        第一个算式会忽略类型比较,因此返回 false,第二个算式需要比较类型,因此返回 true

2.3.4  逻辑运算符

        逻辑运算符一般用于执行布尔运算,通常和比较运算符一起用来表示复杂比较运算,逻辑运算涉及的变量通常不止一个,而且常用于 if、while 和 for 语句中。常见的逻辑运算符有 &&( 逻辑与 )运算符、||( 逻辑或 )运算符和 !( 逻辑非 )运算符三种。

 1.&&运算符

        && 表示逻辑与,若两边表达式的值都为 true,则返回 true;任意一个值为 false ,则返回false 。具体示例代码如下:

5 < 6 && 4 < 3;        // false    后面表达为 false
2 == '2' && 1 == true;        // ture    前后表达式均为 true

 2. ||运算符

        ||表示逻辑或,只有表达式的值都为 false,才返回 false,否则返回 true。具体示例代码如下:

5 < 6 || 4 < 3;        // true    前面的表达式为 true
2 === '2' || 0 == true;        // false    前后表达式均为 false

 3.!运算符

        !表示逻辑非,若表达式的值为 true,则返回 false;若表达式的值为 false,则返回 true。具体示例代码如下:

!(5 < 6);        // false    非运算符会对结果进行取反操作

       逻辑非运算符还可以用于类型转换,采用两个非运算来保证转换的正确性,具体示例代码如下:

var foo = 123;
!!foo;        // true    将其他类型转换成布尔值类型
2.3.5  条件运算符

        条件运算符是 JavaScript 支持的一种特殊的运算符。其语法格式如下:

条件 ? 语句1 : 语句2;

       其中,如果条件为 true,则表达式的值使用"语句1"的值;如果条件为 false,则表达式的值使用"语句2"的值,? :运算符需要有三个操作数,因此一般也称为三目运算。具体示例代码如下:

var foo = true ? 2 : 3;
foo;        // 2    当条件为真,返回2值

2.4  流程控制

        JavaScript中的流程控制语句与其他语言相似,一般可分为顺序结构、 选择结构和循环结构三种。 顺序结构就是程序从上到下、从左到右依次执行。选择结构是按照给定的逻辑条件决定执行顺序,下面将介绍两种选择结构 if 判断和 switch 判断。循环结构是根据代码的逻辑条件来判断是否重复执行某一段程序,包括 for 循环和 while  循环。 

2.4.1  if 判断

        if 判断即if语句,是选择结构中运用最广泛的语句,一般可分为单向选择、双向选择和多项选择三种形式。

1.单向选择

        单向选择是指只有一条选择语句,符合条件即选择,不符合条件即不选择,其语法格式如下: 

if(逻辑条件){
    语句1;
}
    语句2;

        其中,如果if的逻辑条件返回true,则执行语句 1 和语句 2;如果 if 返回 false,则只执行语句2。

         if 语句单向选择流程图,如图2.1所示。

        接下来通过案例演示单向选择语句,具体如例2-1所示。

JavaScript笔记_第11张图片

        单向选择语句。



	
		
		流程判断	
	
	
		
	

        执行结果: 

 JavaScript笔记_第12张图片

        例2-1中,定义变量 score 为730。当执行到 if 语句时,如果 if 小括号内的结果为真, 则执行 if 语句大括号内的代码;如果 if 语句为假,则不执行大括号内的代码。无论 if 语句是否执行,都不会影响 if 外代码的执行,因此,本例会输出以上两条语句。

2.双向选择

        双向选择有两条选择语句,满足条件选择一条语句,不满足条件选择另一条语句。其语法格式如下:

if(逻辑条件){
    语句1;
}else{
    语句2;
}

        其中,如果if的逻辑条件返回 true,则执行语句 1 ,如果 if 的逻辑条件返回 false ,则执行 else内的语句2。

        if语句双向选择流程图,如图所示。

JavaScript笔记_第13张图片

        接下来通过案例演示双向选择语句。



	
		
		流程控制		
	
	
		
	

 运行结果:

JavaScript笔记_第14张图片

        本代码采用双向选择,即 if-else 语句。当 if 语句的条件为真时,会执行 if 大括号内的语句:当 if 语句的条件为假时,会执行 else 大括号内的语句。因此,if 和 else 内的语句不能同时执行,只能执行一个。本例中,score 的值为700 ,小于 720 ,条件不满足,则触发 else 中的语句,输出以上相应结果。

3.多向选择

        多向选择是指有多条选择,进行多次判断,根据判断结构执行相应的语句。其语法格式如下:

if(逻辑条件1){
    语句1;
}else if(逻辑条件2){
    语句2;
}else{
    语句3;
}

        其中,如果 if 的逻辑条件1返回 true ,则执行语句1;如果 if 的逻辑条件1返回 false ,则执行else if 中的逻辑条件2。如果逻辑条件2返回 true ,则执行语句2;如果逻辑条件2 返回 false,则执行else中的语句3。

        if语句多向选择流程图,如图所示。

JavaScript笔记_第15张图片

        接下来通过案例演示多向选择语句。



	
		
		流程控制		
	
	
		
	

运行结果:

JavaScript笔记_第16张图片

        在上面例子中,采用了多向选择语句 if-else if-else 的组合,与双向选择类似,多向选择也只会输出对应的区域。day 变量初始被定义为 6 。先进行 if 语句的条件判断,不满足条件;程序进行else if 的条件判断,满足条件。因此,执行 else if 语句大括号内的代码,输出以上控制台打印的内容。

2.4.2  switch 判断

        switch 判断即 switch 语句,也是选择结构中很常用的语句,用于将一个表达式同多个值进行比较,并根据比较结果选择执行语句。其语法格式如下:

switch(表达式){
    case 取值1:
        语句1;
break;
    case 取值2:
        语句2;
break;
    default:
        语句3;
}

        其中,如果 switch 的表达式匹配取值 1,则执行语句 1 ;如果 switch 的表达式匹配取值 2,则执行语句 2 ;如果都不匹配,则执行默认的代码块语句 3 。

        switch 语句判断流程图,如图所示。

JavaScript笔记_第17张图片

        接下来通过案例演示switch判断语句。



	
		
		流程控制
	
	
		
	

运行效果:

JavaScript笔记_第18张图片

        default 默认值可以省略,break 表示跳出选择,如果不加 break 语句,会执行后续 case 中的结果,因此需要添加 break 语句。注意,switch 中的表达式与 case 语句中的取值是严格相等的模式,即 === 方式,因此以下代码会执行 default 中的内容。具体示例代码如下:


2.4.3  while判断

        while 循环即 while 语句,是循环结构中常见的语句,也是比较简单的循环语句。其语法格式如下:

while(逻辑条件){
    语句1;
}
语句2;

        其中,while循环的逻辑条件为 true 时,执行循环体语句1,且会重复不断地执行语句1。直到逻辑条件为false时,停止执行语句1,而直接执行结束语句2。因此,执行循环操作时,一定要在某个特定点使逻辑条件为 false,否则程序会进入死循环,从而造成浏览器运行崩溃。

        while循环流程图,如图所示。

JavaScript笔记_第19张图片

        接下来通过案例演示while循环。



	
		
		流程控制	
	
	
		
	

运行结果:

JavaScript笔记_第20张图片

        调试结果如图所示。 在本例中,首先定义了变量 i 为 0 ,然后继续向后执行,执行 while 循环语句。当 循环条件 i<5 条件成立时,执行 while 语句大括号内的代码,而且重复执行,直到while 语句的条件不满足时结束。i 每次进入循环体中都进行自身加 1 操作,当循环 5 次时,i 为5 ,不满足 while 语句条件,从而结束 while 循环,继续执行循环后的代码,即输出图中的结果。 

2.4.4  for循环

        for 循环即 for 语句,也是循环结构中常见的语句,同时也是使用最为广泛的循环语句。其语法格式如下:

for(初始值;逻辑条件;循环后操作){
    语句1;
}
语句2;

        其中,循环 for 的逻辑条件为 true 时,执行循环体语句 1,然后执行循环后操作。直到逻辑条件为 false 时,停止语句 1 的执行,而直接执行结束语句 2 。for 循环与 while 循环是等价的,所有能够进行 for 循环操作的方式都可以改写成 while 循环,反之亦然。 for 循环语句流程图,如图所示。

JavaScript笔记_第21张图片

        接下来通过案例演示 for循环。



	
		
		流程控制
	
	
		
	

运行结果: 

JavaScript笔记_第22张图片

        本例中,首先定义了变量 sum 的值为 0 ,然后执行 for 循环。在 for  循环的条件中定义了变量i的初始化为 1,条件为 i<=100 ,自增为 i++ ,这样 for 循环就会执行 100 次。在 100 次执行中都会触发 sum+=i 的语句,即把每一次i的变化值都累加到 sum 变量中。最后循环结束后会输出 1 加到 100 的和,即 sum 的值为 5050 。

        有时需要在循环未结束时就停止循环操作,为此在循环中提供了 break 语句和 continue 语句两种跳出循环的方式,接下来将分别讲解这两种方式。

1.break语句  

        break语句用于跳出整体循环,停止后续循环操作。接下来通过案例演示break语句。



	
		
		流程控制	
	
	
		
	

 运行结果:

JavaScript笔记_第23张图片

        本例中,首先定义了一个 for 循环,并且根据条件会执行 5 次循环体,但是当 i 自增到 3 时,会触发循环体中 if 语句的执行,即触发 break 语句。break 在循环中表示跳出整个循环,后续的代码及后续的循环都会立即停止。因此,只会触发输出 0、1、2 这三个结果。

2.continue 语句

        continue 语句与 break 语句类似,但 continue 语句只跳出本次循环,不影响后续循环接下来通过案例演示continue语句。




	
		
		流程控制	
	
	
		
	

运行结果:

JavaScript笔记_第24张图片

        在本例中,首先定义一个 for 循环,然后根据条件会执行5次循环体,但是当i自增到3时,会触发循环体中 if 语句的执行,即触发 continue 语句,continue 在循环中表示跳出当前循环,后续的代码不会执行,但是后续的循环还会继续。因此,会触发输出0、1、2、4四个结果,而3并没有触发。

第三章  DOM 的基本操作

3.1  获取元素

3.1.1  document 文档

        2如何通过 JavaScript 获取网页中的元素?首先需要了解 document 文档,document 文档指整个页面的根对象(最外层对象),通过document文档获取页面中的具体HTML元素。注意 document 文档的类型为对象类型,即 typeof document 返回 object 值,因此,通常 document 文档亦称 document 对象。document 文档页面的最外层如图所示。

JavaScript笔记_第25张图片

        document 对象常见属性如下表: 

document 对象常见属性
属性 描述
doctype 获取或设置文档头信息

documentElement

获取或设置 标签
head 获取或设置 标签
body 获取或设置 标签
title 获取或设置 标签</td> </tr> </tbody> </table> <p>       接下来通过案例演示 document 对象的常见属性,具体如下所示。</p> <pre><code class="language-html"><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello JS

       调试结果:

JavaScript笔记_第26张图片

        在例 3-1 中,分别输出五句 document 的属性,分别表示 document.doctype(文档信息)、document.documentElement ( 标签)、document.head( 标签)、document.body ( 标签)、document.title( 标签)。可以看到控制台中输出了对应标签的格式及其子内容。</p> <p>        接下来修改<title>的内容,查看发生的变化。具体如例所示。</p> <p>        修改<title>内容,查看变化。</p> <pre><code class="language-javascript"><script> document.title = 'hello DOM'; // 设置 title 为 hello DOM </script></code></pre> <p>        效果图:</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/f245ee488b764379b71593bebfb49948.jpg" target="_blank"><img alt="JavaScript笔记_第27张图片" height="134" src="http://img.e-com-net.com/image/info8/f245ee488b764379b71593bebfb49948.jpg" width="426" style="border:1px solid black;"></a></p> <p>        在例3-2中,对当前页面的<title>标签内的文本内容进行了重新定义,通过 "document.title=hello DOM;" 进行设置。可以看到示图中的 title 展示出来的效果。在后面的章节中还会讲解 document 对象一些常用的属性和方法等复杂内容,这里稍作了解即可。</p> <h5>3.1.2  getElementById() 方法</h5> <p>        在学习 DOM 获取 HTML 中指定的标签元素前,先来思考如何实现 CSS 样式,可以通过给元素添加 id 属性,然后通过 id 选择器进行样式的设置,具体示例代码如下:</p> <p> </p> <h5>3.1.3  元素属性操作</h5> <h4>3.2  元素样式操作</h4> <h5>3.2.1  行间样式</h5> <h5>3.2.2  cssText</h5> <h5>3.2.3  非行间样式</h5> <h4>3.3  获取集合</h4> <h5>3.3.1  getElementsByTagName() 方法</h5> <h5>3.3.2  getElementsByClassName() 方法</h5> <h5>3.3.4  innerHTML</h5> <h5>3.3.5  获取元素</h5> <h4>3.4  实际应用</h4> <h5>3.4.1  隔行换色</h5> <h5>3.4.2  拼接背景图</h5> <h5>3.4.3  九九乘法表</h5> <h3>第四章  JavaScript 函数</h3> <h3>第五章  JavaScript 进阶语法</h3> <h3>第六章  字符串与数组</h3> <h3>第七章  时间与正则</h3> <h3>第八章  DOM 详解</h3> <h3>第九章  BOM 详解</h3> <h3>第十章  事件详解</h3> <h3>第十一章  JSON 对象与 AJAX 技术</h3> <h3>第十二章  面向对象</h3> <h3>第十三章  动画与算法</h3> <h3>第十四章  ECMAScript 6.0</h3> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1717762175231143936"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(javascript,笔记,开发语言)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1943992018892025856.htm" title="JSON 与 AJAX" target="_blank">JSON 与 AJAX</a> <span class="text-muted">Auscy</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>一、JSON(JavaScriptObjectNotation)1.数据类型与语法细节支持的数据类型:基本类型:字符串(需用双引号)、数字、布尔值(true/false)、null。复杂类型:数组([])、对象({})。严格语法规范:键名必须用双引号包裹(如"name":"张三")。数组元素用逗号分隔,最后一个元素后不能有多余逗号。数字不能以0开头(如012会被解析为12),不支持八进制/十六进制</div> </li> <li><a href="/article/1943991261279088640.htm" title="C++ 11 Lambda表达式和min_element()与max_element()的使用_c++ lamda函数 min_element((1)" target="_blank">C++ 11 Lambda表达式和min_element()与max_element()的使用_c++ lamda函数 min_element((1)</a> <span class="text-muted">2401_84976182</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上CC++开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新如果你需要这些资料,可以戳这里获取#include#include#includeusingnamespacestd;boolcmp(int</div> </li> <li><a href="/article/1943990125864218624.htm" title="JavaScript 树形菜单总结" target="_blank">JavaScript 树形菜单总结</a> <span class="text-muted">Auscy</span> <a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a> <div>树形菜单是前端开发中常见的交互组件,用于展示具有层级关系的数据(如文件目录、分类列表、组织架构等)。以下从核心概念、实现方式、常见功能及优化方向等方面进行总结。一、核心概念层级结构:数据以父子嵌套形式存在,如{id:1,children:[{id:2}]}。节点:树形结构的基本单元,包含自身信息及子节点(若有)。展开/折叠:子节点的显示与隐藏切换,是树形菜单的核心交互。递归渲染:因数据层级不固定,</div> </li> <li><a href="/article/1943987101301272576.htm" title="精通Canvas:15款时钟特效代码实现指南" target="_blank">精通Canvas:15款时钟特效代码实现指南</a> <span class="text-muted">烟幕缭绕</span> <div>本文还有配套的精品资源,点击获取简介:HTML5的Canvas是一个用于绘制矢量图形的API,通过JavaScript实现动态效果。本项目集合了15种不同的时钟特效代码,帮助开发者通过学习绘制圆形、线条、时间更新、旋转、颜色样式设置及动画效果等概念,深化对Canvas的理解和应用。项目中的CSS文件负责时钟的样式设定,而JS文件则包含实现各种特效的逻辑,通过不同的函数或类处理时间更新和动画绘制,提</div> </li> <li><a href="/article/1943983696184930304.htm" title="基于链家网的二手房数据采集清洗与可视化分析" target="_blank">基于链家网的二手房数据采集清洗与可视化分析</a> <span class="text-muted">Mint_Datazzh</span> <a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a> <div>个人学习内容笔记,仅供参考。项目链接:https://gitee.com/rongwu651/lianjia原文链接:基于链家网的二手房数据采集清洗与可视化分析–笔墨云烟研究内容该课题的主要目的是通过将二手房网站上的存量与已销售房源,构建一个二手房市场行情情况与房源特点的可视化平台。该平台通过HTML架构和Echarts完成可视化的搭建。因此,该课题的主要研究内容就是如何利用相关技术设计并实现这样</div> </li> <li><a href="/article/1943983064304644096.htm" title="算法学习笔记:17.蒙特卡洛算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题" target="_blank">算法学习笔记:17.蒙特卡洛算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题</a> <span class="text-muted"></span> <div>在计算机科学和数学领域,蒙特卡洛算法(MonteCarloAlgorithm)以其独特的随机抽样思想,成为解决复杂问题的有力工具。从圆周率的计算到金融风险评估,从物理模拟到人工智能,蒙特卡洛算法都发挥着不可替代的作用。本文将深入剖析蒙特卡洛算法的思想、解题思路,结合实际应用场景与Java代码实现,并融入考研408的相关考点,穿插图片辅助理解,帮助你全面掌握这一重要算法。蒙特卡洛算法的基本概念蒙特卡</div> </li> <li><a href="/article/1943983064719880192.htm" title="分布式学习笔记_04_复制模型" target="_blank">分布式学习笔记_04_复制模型</a> <span class="text-muted">NzuCRAS</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>常见复制模型使用复制的目的在分布式系统中,数据通常需要被分布在多台机器上,主要为了达到:拓展性:数据量因读写负载巨大,一台机器无法承载,数据分散在多台机器上仍然可以有效地进行负载均衡,达到灵活的横向拓展高容错&高可用:在分布式系统中单机故障是常态,在单机故障的情况下希望整体系统仍然能够正常工作,这时候就需要数据在多台机器上做冗余,在遇到单机故障时能够让其他机器接管统一的用户体验:如果系统客户端分布</div> </li> <li><a href="/article/1943983063352537088.htm" title="算法学习笔记:15.二分查找 ——从原理到实战,涵盖 LeetCode 与考研 408 例题" target="_blank">算法学习笔记:15.二分查找 ——从原理到实战,涵盖 LeetCode 与考研 408 例题</a> <span class="text-muted">呆呆企鹅仔</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E5%AD%A6%E4%B9%A0/1.htm">算法学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">二分查找</a> <div>在计算机科学的查找算法中,二分查找以其高效性占据着重要地位。它利用数据的有序性,通过不断缩小查找范围,将原本需要线性时间的查找过程优化为对数时间,成为处理大规模有序数据查找问题的首选算法。二分查找的基本概念二分查找(BinarySearch),又称折半查找,是一种在有序数据集合中查找特定元素的高效算法。其核心原理是:通过不断将查找范围减半,快速定位目标元素。与线性查找逐个遍历元素不同,二分查找依赖</div> </li> <li><a href="/article/1943979785097113600.htm" title="【前端】jQuery数组合并去重方法总结" target="_blank">【前端】jQuery数组合并去重方法总结</a> <span class="text-muted"></span> <div>在jQuery中合并多个数组并去重,推荐使用原生JavaScript的Set对象(高效简单)或$.unique()(仅适用于DOM元素,不适用于普通数组)。以下是完整解决方案:方法1:使用ES6Set(推荐)//定义多个数组constarr1=[1,2,3];constarr2=[2,3,4];constarr3=[3,4,5];//合并数组并用Set去重constmergedArray=[...</div> </li> <li><a href="/article/1943969321717919744.htm" title="日历插件-FullCalendar的详细使用" target="_blank">日历插件-FullCalendar的详细使用</a> <span class="text-muted">老马聊技术</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>一、介绍FullCalendar是一个功能强大、高度可定制的JavaScript日历组件,用于在网页中显示和管理日历事件。它支持多种视图(月、周、日等),可以轻松集成各种框架,并提供丰富的事件处理功能。二、实操案例具体代码如下:FullCalendar日期选择body{font-family:Arial,sans-serif;margin:20px;}#calendar{max-width:900</div> </li> <li><a href="/article/1943963776244051968.htm" title="入门html这篇文章就够了" target="_blank">入门html这篇文章就够了</a> <span class="text-muted">ξ流ぁ星ぷ132</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>HTML笔记文章目录HTML笔记html介绍什么是htmlhtml的作用HTML标签介绍常用标签标签and标签and标签u标签del删除线br标签用于换行pre标签,预处理标签span标签div标签sub标签andsup标签hr标签h1,h2...h6标签:HTML5中的语义标签:特殊字符img标签a标签第一种用法:超链接第二种用法:锚点video标签表格标签:form标签input标签selec</div> </li> <li><a href="/article/1943956589136375808.htm" title="OKHttp3源码分析——学习笔记" target="_blank">OKHttp3源码分析——学习笔记</a> <span class="text-muted">Sincerity_</span> <a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E7%9B%B8%E5%85%B3/1.htm">源码相关</a><a class="tag" taget="_blank" href="/search/Okhttp/1.htm">Okhttp</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/1.htm">源码解析</a><a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a><a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a> <div>文章目录1.HttpClient与HttpUrlConnection的区别2.OKHttp源码分析使用步骤:dispatcher任务调度器,(后面有详细说明)Request请求RealCallAsyncCall3.OKHttp架构分析1.异步请求线程池,Dispather2.连接池清理线程池-ConnectionPool3.缓存整理线程池DisLruCache4.Http2异步事务线程池,http</div> </li> <li><a href="/article/1943954447797383168.htm" title="javascript高级程序设计第3版——第12章 DOM2与DOM3" target="_blank">javascript高级程序设计第3版——第12章 DOM2与DOM3</a> <span class="text-muted">weixin_30687587</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a><a class="tag" taget="_blank" href="/search/ViewUI/1.htm">ViewUI</a> <div>12章——DOM2与DOM3为了增强D0M1,DOM级规范定义了一些模块。DOM2核心:为不同的DOM类型引入了一些与XML命名空间有关的方法,还定义了以编程方式创建Document实例的方法;DOM2级样式:针对操作元素的样式而开发;其特性总结:1.每个元素都有一个关联的style对象,可用来确定和修改行内样式;2.要确定某个元素的计算样式,可使用getComgetComputedStyle()</div> </li> <li><a href="/article/1943950163496202240.htm" title="JavaScript 基础09:Web APIs——日期对象、DOM节点" target="_blank">JavaScript 基础09:Web APIs——日期对象、DOM节点</a> <span class="text-muted">梦想当全栈</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaScript基础09:WebAPIs——日期对象、DOM节点进一步学习DOM相关知识,实现可交互的网页特效能够插入、删除和替换元素节点。能够依据元素节点关系查找节点。一、日期对象掌握Date日期对象的使用,动态获取当前计算机的时间。ECMAScript中内置了获取系统时间的对象Date,使用Date时与之前学习的内置对象console和Math不同,它需要借助new关键字才能使用。1.实例</div> </li> <li><a href="/article/1943926464663580672.htm" title="vue3面试题(个人笔记)" target="_blank">vue3面试题(个人笔记)</a> <span class="text-muted">武昌库里写JAVA</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>vue3比vue2有什么优势?性能更好,打包体积更小,更好的ts支持,更好的代码组织,更好的逻辑抽离,更多的新功能。描述Vue3生命周期CompositionAPI的生命周期:onMounted()onUpdated()onUnmounted()onBeforeMount()onBeforeUpdate()onBeforeUnmount()onErrorCaptured()onRenderTrac</div> </li> <li><a href="/article/1943920162180755456.htm" title="Python学习笔记5|条件语句和循环语句" target="_blank">Python学习笔记5|条件语句和循环语句</a> <span class="text-muted">iamecho9</span> <a class="tag" taget="_blank" href="/search/Python%E4%BB%8E0%E5%88%B01%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">Python从0到1学习笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>一、条件语句条件语句用于根据不同的条件执行不同的代码块。1、if语句基本语法:if布尔型语句1:代码块#语句1为True时执行的代码示例:age=int(input("请输入你的年龄:"))ifage>=18:print("你已成年")2、if-else语句如果if条件不成立,则执行else代码块:if布尔型语句1:代码块#语句1为True时执行的代码else:代码块#语句1为False时执行的代</div> </li> <li><a href="/article/1943919026744913920.htm" title="JavaScript之DOM操作与事件处理详解" target="_blank">JavaScript之DOM操作与事件处理详解</a> <span class="text-muted">AA-代码批发V哥</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>JavaScript之DOM操作与事件处理详解一、DOM基础:理解文档对象模型二、DOM元素的获取与访问2.1基础获取方法2.2集合的区别与注意事项三、DOM元素的创建与修改3.1创建与插入元素3.2修改元素属性与样式3.2.1属性操作3.2.2样式操作3.3元素内容的修改四、DOM元素的删除与替换4.1删除元素4.2替换元素五、事件处理:实现页面交互5.1事件绑定的三种方式5.1.1HTML属性</div> </li> <li><a href="/article/1943917893620133888.htm" title="V少JS基础班之第五弹" target="_blank">V少JS基础班之第五弹</a> <span class="text-muted">V少在逆向</span> <a class="tag" taget="_blank" href="/search/JS%E5%9F%BA%E7%A1%80%E7%8F%AD/1.htm">JS基础班</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>文章目录一、前言二、本节涉及知识点三、重点内容1-函数的定义2-函数的构成1.函数参数详解1)参数个数不固定2)默认参数3)arguments对象(类数组)4)剩余参数(Rest参数)5)函数参数是按值传递的6)解构参数传递7)参数校验技巧(JavaScript没有类型限制,需要手动校验)2.函数返回值详解3-函数的分类1-函数声明式:2-函数表达式:3-箭头函数:4-构造函数:5-IIFE:6-</div> </li> <li><a href="/article/1943917011268595712.htm" title="Javaweb学习之Vue模板语法(三)" target="_blank">Javaweb学习之Vue模板语法(三)</a> <span class="text-muted">不要数手指啦</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>目录学习资料前情回顾本期介绍(vue模板语法)文本插值Vue的Attribute绑定使用JavaScript表达式综合实例代码:学习资料Vue.js-渐进式JavaScript框架|Vue.js(vuejs.org)前情回顾项目的创建大家可以看这篇文章Vue学习之项目的创建-CSDN博客本期介绍(vue模板语法)首先,找到我们编写代码的地方找到自己项目的src文件夹,打开之后点击component</div> </li> <li><a href="/article/1943914995217657856.htm" title="swagger【个人笔记】" target="_blank">swagger【个人笔记】</a> <span class="text-muted">撰卢</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>文章目录swagger导入mave坐标在配置类(WebMvcConfiguration)中加入knife4j相关配置设置静态资源映射,主要是让拦截器放行swagger常用注解@Api(tags="\[描述这个类的作用]")@ApiModel(description="\[描述这个类的作用]")@ApiModelProPerty("描述这个类的作用")@ApiOperation("\[描述方法的作用</div> </li> <li><a href="/article/1943913603195269120.htm" title="【个人笔记】负载均衡" target="_blank">【个人笔记】负载均衡</a> <span class="text-muted">撰卢</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>文章目录nginx反向代理的好处负载均衡负载均很的配置方式均衡负载的方式nginx反向代理的好处提高访问速度进行负载均衡保证后端服务安全负载均衡负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器负载均很的配置方式upstreamwebservers{server192.168.100.128:8080server192.168.100.129:8080}server{lis</div> </li> <li><a href="/article/1943907050870337536.htm" title="深入解析 “void(0);” 的用法与作用_void(0);" target="_blank">深入解析 “void(0);” 的用法与作用_void(0);</a> <span class="text-muted"></span> <div>关键要点void(0);是JavaScript中的一个表达式,研究表明它通常用于超链接中,防止页面跳转。它通过void运算符计算表达式并返回undefined,常用于创建“死链接”。证据显示,这种用法简单易用,但现代开发更推荐使用事件监听器。基本概念void(0);的作用void(0);是JavaScript的void运算符的一个实例,void运算符会计算一个表达式但不返回任何值,而是始终返回un</div> </li> <li><a href="/article/1943881336846610432.htm" title="在 Obsidian 中本地使用 DeepSeek — 无需互联网!" target="_blank">在 Obsidian 中本地使用 DeepSeek — 无需互联网!</a> <span class="text-muted">知识大胖</span> <a class="tag" taget="_blank" href="/search/NVIDIA/1.htm">NVIDIA</a><a class="tag" taget="_blank" href="/search/GPU%E5%92%8C%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/1.htm">GPU和大语言模型开发教程</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a> <div>简介您是否想在Obsidian内免费使用类似于ChatGPT的本地LLM?如果是,那么本指南适合您!我将引导您完成在Obsidian中安装和使用DeepSeek-R1模型的确切步骤,这样您就可以在笔记中拥有一个由AI驱动的第二大脑。推荐文章《24GBGPU中的DeepSeekR1:UnslothAI针对671B参数模型进行动态量化》权重1,DeepSeek类《在RaspberryPi上运行语音识别</div> </li> <li><a href="/article/1943848300524400640.htm" title="【JS三兄弟谁是谁】搞懂 splice、slice、split,只需一杯奶茶的时间!" target="_blank">【JS三兄弟谁是谁】搞懂 splice、slice、split,只需一杯奶茶的时间!</a> <span class="text-muted">dorabighead</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%85%AB%E8%82%A1%E6%80%BB%E7%BB%93/1.htm">前端八股总结</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaScript有三兄弟,经常一起“切人”。他们名字相似、功能相关,但性格迥异,常被搞混。今天,就带你喝着奶茶,笑着剖析,帮你彻底搞懂:splice、slice、split到底是谁?干了啥?凭啥这么火?一、三兄弟登场:不同对象,不同任务名称作用对象是否修改原对象返回类型功能简述splice数组✅是被删除元素数组原地删除元素并可插入新元素slice数组/字符串❌否副本(子集)复制选中部分,原体不</div> </li> <li><a href="/article/1943848048312512512.htm" title="5G标准学习笔记14 - CSI--RS概述" target="_blank">5G标准学习笔记14 - CSI--RS概述</a> <span class="text-muted">刘孬孬沉迷学习</span> <a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E4%B8%8E%E9%80%9A%E4%BF%A1/1.htm">信息与通信</a> <div>5G标准学习笔记14-CSI–RS概述大家好~,这里是刘孬孬,今天带着大家一起学习一下5GNR中一个非常非常重要的参考信号------------------CSI-RS信号,CSI-RS不是持续发送,UE只能在网络明确配置了CSI-RS的情况下才能使用其进行信道测量。前言对于CSI-RS,肯定还离不开前面所说的CSI(channelstateinformation),前面也讲过CSI对于MIMO</div> </li> <li><a href="/article/1943847921355124736.htm" title="5G标准学习笔记06-基于AI/ML波束管理" target="_blank">5G标准学习笔记06-基于AI/ML波束管理</a> <span class="text-muted">刘孬孬沉迷学习</span> <a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>5G标准学习笔记06-基于AI/ML波束管理前言前面对于孬孬学习了波束管理的概述,下面要进一步来看一下传统波束管理和现在3GPP中推动的AL/ML波束管理之前的区别联系。一、传统波束管理方法流程传统BM流程主要包括以下步骤:波束扫描(BeamSweeping):gNB通过顺序发送多个窄波束(SSB或CSI-RS),覆盖整个服务区域,UE测量每个波束的信号质量(如L1-RSRP或L1-SINR)。波</div> </li> <li><a href="/article/1943847795194654720.htm" title="5G标准学习笔记03- CSI 反馈增强概述" target="_blank">5G标准学习笔记03- CSI 反馈增强概述</a> <span class="text-muted">刘孬孬沉迷学习</span> <a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>5G标准学习笔记03-CSI反馈增强概述大家好,最近在研究AI/ML3gpp标准NR空口的有关内容,后面可能会给大家介绍一下对应的有关内容AI/ML在3GPP标准中的研究进展在AI/ML在NR空口的应用中,对应标准主要聚焦了3个case进行讨论研究分别是:CSI反馈增强;波束管理;定位精度增强;这三个内容可能比较涉及RAN1/2的具体内容,后面会基于这个进行一定的介绍。今天主要是主要介绍CSI反馈</div> </li> <li><a href="/article/1943847416503529472.htm" title="前端面试题总结——JS篇" target="_blank">前端面试题总结——JS篇</a> <span class="text-muted">又又呢</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、说说JavaScript中的数据类型?存储上有什么差别?1、数据类型基本类型number:数值类型十进制:letintNum=55八进制(零开头):letnum1=070十六进制(0x开头):lethexNum1=0xANaN:特殊数值,意为“不是数值”string:字符串类型boolean:布尔值,true或falseundefined:表示未定义null:空值symbol:是原始值,且符号</div> </li> <li><a href="/article/1943847035476176896.htm" title="运维笔记<4> xxl-job打通" target="_blank">运维笔记<4> xxl-job打通</a> <span class="text-muted">GeminiJM</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/xxl-job/1.htm">xxl-job</a> <div>新的一天,来点新的运维业务,今天是xxl-job的打通其实在非集群中,xxl-job的使用相对是比较简单的,相信很多人都有使用的经验这次我们的业务场景是在k8s集群中,用xxl-job来做定时调度加上第一次倒腾,也是遇到了不少问题,在这里做一些记录1.xxl-job的集群安装首先是xxl-job的集群安装先贴上xxl-jobsql初始化文件的地址:xxl-job/doc/db/tables_xxl</div> </li> <li><a href="/article/1943844765225250816.htm" title="前端面试题——5.AjAX的缺点?" target="_blank">前端面试题——5.AjAX的缺点?</a> <span class="text-muted">浅端</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">前端面试题</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">前端面试题</a> <div>①传统的web交互是:用户一个网页动作,就会发送一个http请求到服务器,服务器处理完该请求再返回一个完整的HTML页面,客户端再重新加载,这样极大地浪费了带宽。②AJAX的出现解决了这个问题,它只会向服务器请求用户所需要的数据,并在客户端采用JavaScript处理返回的数据,操作DOM更新页面。③AJXA优点:无刷新更新页面异步服务器通信前端后端负载均衡④AJAX缺点:干掉了Back和Hist</div> </li> <li><a href="/article/81.htm" title="java短路运算符和逻辑运算符的区别" target="_blank">java短路运算符和逻辑运算符的区别</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a> <div> /* * 逻辑运算符——不论是什么条件都要执行左右两边代码 * 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的 * 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。 * * 并联电路两个开关只要有一个开关闭合,电路就会通。 * 类似于短路或(||),只要有其中一个为true(开关闭合)是</div> </li> <li><a href="/article/208.htm" title="Java异常那些不得不说的事" target="_blank">Java异常那些不得不说的事</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>一、在finally块中做数据回收操作 比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。 JDBCAgent jdbc = new JDBCAgent(); try{ jdbc.excute("select * from ctp_log"); }catch(SQLException e){ ... }finally{ jdbc.close(); </div> </li> <li><a href="/article/335.htm" title="utf-8与utf-8(无BOM)的区别" target="_blank">utf-8与utf-8(无BOM)的区别</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>BOM——Byte Order Mark,就是字节序标记   在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如</div> </li> <li><a href="/article/462.htm" title="JAVA Annotation之定义篇" target="_blank">JAVA Annotation之定义篇</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E8%A7%A3/1.htm">注解</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a> <div>    Annotation: 译为注释或注解 An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa</div> </li> <li><a href="/article/589.htm" title="tomcat的多域名、虚拟主机配置" target="_blank">tomcat的多域名、虚拟主机配置</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。 很多朋友搜索的内容基本是告诉我们这么配置: 在Engine标签下增面积Host标签,如下: <Host name="www.site1.com" appBase="webapps"</div> </li> <li><a href="/article/716.htm" title="Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )" target="_blank">Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/capistrano/1.htm">capistrano</a> <div> 1.ssh -v hdfs@192.168.18.133 出现 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 错误 运行状况如下: OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuratio</div> </li> <li><a href="/article/843.htm" title="log4j的用法" target="_blank">log4j的用法</a> <span class="text-muted">Harry642</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>一、前言:     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中</div> </li> <li><a href="/article/970.htm" title="mysql、sqlserver、oracle分页,java分页统一接口实现" target="_blank">mysql、sqlserver、oracle分页,java分页统一接口实现</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</a> <div> 定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量 oracle分页:     select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart sqlServer分页:  </div> </li> <li><a href="/article/1097.htm" title="Hessian 简单例子" target="_blank">Hessian 简单例子</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>hello.hessian.MyCar.java package hessian.pojo; import java.io.Serializable; public class MyCar implements Serializable { private static final long serialVersionUID = 473690540190845543</div> </li> <li><a href="/article/1224.htm" title="数据库对象的同义词和序列" target="_blank">数据库对象的同义词和序列</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">同义词</a><a class="tag" taget="_blank" href="/search/ORACLE%E6%9D%83%E9%99%90/1.htm">ORACLE权限</a> <div>回顾简单的数据库权限等命令; 解锁用户和锁定用户 alter user scott account lock/unlock; //system下查看系统中的用户 select * dba_users; //创建用户名和密码 create user wj identified by wj; identified by //授予连接权和建表权 grant connect to </div> </li> <li><a href="/article/1351.htm" title="使用Powermock和mockito测试静态方法" target="_blank">使用Powermock和mockito测试静态方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/Powermock/1.htm">Powermock</a> <div>        实例: package com.bijian.study; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.junit.Before; import org.junit.Test; import or</div> </li> <li><a href="/article/1478.htm" title="精通Oracle10编程SQL(6)访问ORACLE" target="_blank">精通Oracle10编程SQL(6)访问ORACLE</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>/* *访问ORACLE */ --检索单行数据 --使用标量变量接收数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; dbms_output.pu</div> </li> <li><a href="/article/1605.htm" title="【Nginx四】Nginx作为HTTP负载均衡服务器" target="_blank">【Nginx四】Nginx作为HTTP负载均衡服务器</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div> Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:   负载均衡的好处 增加可用资源 增加吞吐量 加快响应速度,降低延时 出错的重试验机制 Nginx主要支持三种均衡算法: round-robin l</div> </li> <li><a href="/article/1732.htm" title="jquery-validation备忘" target="_blank">jquery-validation备忘</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a><a class="tag" taget="_blank" href="/search/Firebug/1.htm">Firebug</a> <div>留点学习jquery validation总结的代码:   function checkForm(){ validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID errorElement :"span",// 使用"div"标签标记错误, 默认:&</div> </li> <li><a href="/article/1859.htm" title="solr限制admin界面访问(端口限制和http授权限制)" target="_blank">solr限制admin界面访问(端口限制和http授权限制)</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/%E9%99%90%E5%AE%9AIp%E8%AE%BF%E9%97%AE/1.htm">限定Ip访问</a> <div>solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。 可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。 我们先看如何通过tomcat配置http授权限制。 第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如: <userusername="ad</div> </li> <li><a href="/article/1986.htm" title="多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1" target="_blank">多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div> public class IncDecThread { private int j=10; /* * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1 * 两个问题: * 1、线程同步--synchronized * 2、线程之间如何共享同一个j变量--内部类 */ public static </div> </li> <li><a href="/article/2113.htm" title="买房历程" target="_blank">买房历程</a> <span class="text-muted">cfyme</span> <div>    2015-06-21: 万科未来城,看房子   2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675   2015-06-27: 房子首付,签完合同   2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。   首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-</div> </li> <li><a href="/article/2240.htm" title="[军事与科技]制造大型太空战舰的前奏" target="_blank">[军事与科技]制造大型太空战舰的前奏</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a> <div>        天气热了........空调和电扇要准备好..........        最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........        所以,我们不得不关</div> </li> <li><a href="/article/2367.htm" title="dateformat" target="_blank">dateformat</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/DateFormat/1.htm">DateFormat</a> <div> "Symbol Meaning Presentation Ex." "------ ------- ------------ ----" "G era designator (Text) AD" "y year</div> </li> <li><a href="/article/2494.htm" title="Hadoop如何实现关联计算" target="_blank">Hadoop如何实现关联计算</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E8%AE%A1%E7%AE%97/1.htm">关联计算</a> <div>    选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。     以关联计算为例。     假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?   &nbs</div> </li> <li><a href="/article/2621.htm" title="用户模型中修改用户信息时,密码是如何处理的" target="_blank">用户模型中修改用户信息时,密码是如何处理的</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。 场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。 面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这</div> </li> <li><a href="/article/2748.htm" title="中文 iOS/Mac 开发博客列表" target="_blank">中文 iOS/Mac 开发博客列表</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Blog/1.htm">Blog</a> <div>  本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。 本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。 本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。 </div> </li> <li><a href="/article/2875.htm" title="js去除空格,去除左右两端的空格" target="_blank">js去除空格,去除左右两端的空格</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%99%A4%E5%B7%A6%E5%8F%B3%E4%B8%A4%E7%AB%AF%E7%9A%84%E7%A9%BA%E6%A0%BC/1.htm">去除左右两端的空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E6%8E%89%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC/1.htm">js去掉所有空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E9%99%A4%E7%A9%BA%E6%A0%BC/1.htm">js去除空格</a> <div>js去除空格,去除左右两端的空格 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g</div> </li> <li><a href="/article/3002.htm" title="SpringMVC4零配置--web.xml" target="_blank">SpringMVC4零配置--web.xml</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a> <div>servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。 ServletContainerInitializer:启动容器时负责加载相关配置 package javax.servlet; import java.util.Set; public interface ServletContainer</div> </li> <li><a href="/article/3129.htm" title="《开源框架那些事儿21》:巧借力与借巧力" target="_blank">《开源框架那些事儿21》:巧借力与借巧力</a> <span class="text-muted">j2eetop</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a> <div>同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。 故事1:巧借力,乌鸦也可以吃核桃 有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。 核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,</div> </li> <li><a href="/article/3256.htm" title="JQuery EasyUI 验证扩展" target="_blank">JQuery EasyUI 验证扩展</a> <span class="text-muted">可怜的猫</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E9%AA%8C%E8%AF%81/1.htm">验证</a> <div>  最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。   以下内容只需要在公用js中添加即可。   使用类似于如下: <input class="easyui-textbox" name="mobile" id="mobile&</div> </li> <li><a href="/article/3383.htm" title="架构师之httpurlconnection----------读取和发送(流读取效率通用类)" target="_blank">架构师之httpurlconnection----------读取和发送(流读取效率通用类)</a> <span class="text-muted">nannan408</span> <div>1.前言.    如题. 2.代码. /* * Copyright (c) 2015, S.F. Express Inc. All rights reserved. */ package com.test.test.test.send; import java.io.IOException; import java.io.InputStream</div> </li> <li><a href="/article/3510.htm" title="Jquery性能优化" target="_blank">Jquery性能优化</a> <span class="text-muted">r361251</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>一、注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 二、请使用一个var来定义变量 如果你使用多个变量的话,请如下方式定义: . 代码如下: var page </div> </li> <li><a href="/article/3637.htm" title="在eclipse项目中使用maven管理依赖" target="_blank">在eclipse项目中使用maven管理依赖</a> <span class="text-muted">tjj006</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>概览: 如何导入maven项目至eclipse中 建立自有Maven  Java类库服务器 建立符合maven代码库标准的自定义类库 Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。 我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把</div> </li> <li><a href="/article/3764.htm" title="中国天气网省市级联页面" target="_blank">中国天气网省市级联页面</a> <span class="text-muted">x125858805</span> <a class="tag" taget="_blank" href="/search/%E7%BA%A7%E8%81%94/1.htm">级联</a> <div>1、页面及级联js <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> &l</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>