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/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950232782412247040.htm" title="日更006 终极训练营day3" target="_blank">日更006 终极训练营day3</a> <span class="text-muted">懒cici</span> <div>人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向</div> </li> <li><a href="/article/1950220179610857472.htm" title="【花了N长时间读《过犹不及》,不断练习,可以越通透】" target="_blank">【花了N长时间读《过犹不及》,不断练习,可以越通透】</a> <span class="text-muted">君君Love</span> <div>我已经记不清花了多长时间去读《过犹不及》,读书笔记都写了42页,这算是读得特别精细的了。是一本难得的好书,虽然书中很多内容和圣经吻合,我不是基督徒,却觉得这样的文字值得细细品味,和我们的生活息息相关。我是个界线建立不牢固的人,常常愧疚,常常害怕他人的愤怒,常常不懂拒绝,还有很多时候表达不了自己真实的感受,心里在说不嘴里却在说好……这本书给我很多的启示,让我学会了怎样去建立属于自己的清晰的界限。建立</div> </li> <li><a href="/article/1950218819616174080.htm" title="基于redis的Zset实现作者的轻量级排名" target="_blank">基于redis的Zset实现作者的轻量级排名</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/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的</div> </li> <li><a href="/article/1950216170401492992.htm" title="常规笔记本和加固笔记本的区别" target="_blank">常规笔记本和加固笔记本的区别</a> <span class="text-muted">luchengtech</span> <a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E9%98%B2%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">三防笔记本</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">加固计算机</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">加固笔记本</a> <div>在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输</div> </li> <li><a href="/article/1950210374787723264.htm" title="第八课: 写作出版你最关心的出书流程和市场分析(无戒学堂复盘)" target="_blank">第八课: 写作出版你最关心的出书流程和市场分析(无戒学堂复盘)</a> <span class="text-muted">人在陌上</span> <div>今天是周六,恰是圣诞节。推掉了两个需要凑腿的牌局,在一个手机,一个笔记本,一台电脑,一杯热茶的陪伴下,一个人静静地回听无戒学堂的最后一堂课。感谢这一个月,让自己的习惯开始改变,至少,可以静坐一个下午而不觉得乏味枯燥难受了,要为自己点个赞。我深知,这最后一堂课的内容,以我的资质和毅力,可能永远都用不上。但很明显,无戒学堂是用了心的,毕竟,有很多优秀学员,已经具备了写作能力,马上就要用到这堂课的内容。</div> </li> <li><a href="/article/1950208107430866944.htm" title="python笔记14介绍几个魔法方法" target="_blank">python笔记14介绍几个魔法方法</a> <span class="text-muted">抢公主的大魔王</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std</div> </li> <li><a href="/article/1950205034075582464.htm" title="《感官品牌》读书笔记 1" target="_blank">《感官品牌》读书笔记 1</a> <span class="text-muted">西红柿阿达</span> <div>原文:最近我在东京街头闲逛时,与一位女士擦肩而过,我发现她的香水味似曾相识。“哗”的一下,记亿和情感立刻像潮水般涌了出来。这个香水味把我带回了15年前上高中的时候,我的一位亲密好友也是用这款香水。一瞬间,我呆站在那里,东京的街景逐渐淡出,取而代之的是我年少时的丹麦以及喜悦、悲伤、恐惧、困惑的记忆。我被这熟悉的香水味征服了。感想:感官是有记忆的,你所听到,看到,闻到过的有代表性的事件都会在大脑中深深</div> </li> <li><a href="/article/1950203883577995264.htm" title="我不想再当知识的搬运工" target="_blank">我不想再当知识的搬运工</a> <span class="text-muted">楚煜楚尧</span> <div>因为学校课题研究的需要,这个暑假我依然需要完成一本书的阅读笔记。我选的是管建刚老师的《习课堂十讲》。这本书,之前我读过,所以重读的时候,感到很亲切,摘抄起来更是非常得心应手。20页,40面,抄了十天,终于在今天大功告成了。这对之前什么事都要一拖再拖的我来说,是破天荒的改变。我发现至从认识小尘老师以后,我的确发生了很大的改变。遇到必须做却总是犹豫不去做的事,我学会了按照小尘老师说的那样,在心里默默数</div> </li> <li><a href="/article/1950199576451411968.htm" title="20210517坚持分享53天读书摘抄笔记 非暴力沟通——爱自己" target="_blank">20210517坚持分享53天读书摘抄笔记 非暴力沟通——爱自己</a> <span class="text-muted">f79a6556cb19</span> <div>让生命之花绽放在赫布·加德纳(HerbGardner)编写的《一千个小丑》一剧中,主人公拒绝将他12岁的外甥交给儿童福利院。他郑重地说道:“我希望他准确无误地知道他是多么特殊的生命,要不,他在成长的过程中将会忽视这一点。我希望他保持清醒,并看到各种奇妙的可能。我希望他知道,一旦有机会,排除万难给世界一点触动是值得的。我还希望他知道为什么他是一个人,而不是一张椅子。”然而,一旦负面的自我评价使我们看</div> </li> <li><a href="/article/1950196906563006464.htm" title="Unity学习笔记1" target="_blank">Unity学习笔记1</a> <span class="text-muted">zy_777</span> <div>通过一个星期的简单学习,初步了解了下unity,unity的使用,以及场景的布局,UI,以及用C#做一些简单的逻辑。好记性不如烂笔头,一些关键帧还是记起来比较好,哈哈,不然可能转瞬即逝了,(PS:纯小白观点,unity大神可以直接忽略了)一:MonoBehaviour类的初始化1,Instantiate()创建GameObject2,通过Awake()和Start()来做初始化3,Update、L</div> </li> <li><a href="/article/1950194742100815872.htm" title="用代码生成艺术字:设计个性化海报的秘密" target="_blank">用代码生成艺术字:设计个性化海报的秘密</a> <span class="text-muted"></span> <div>本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准</div> </li> <li><a href="/article/1950190146074767360.htm" title="大数据技术笔记—spring入门" target="_blank">大数据技术笔记—spring入门</a> <span class="text-muted">卿卿老祖</span> <div>篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据</div> </li> <li><a href="/article/1950187554129113088.htm" title="Django学习笔记(一)" target="_blank">Django学习笔记(一)</a> <span class="text-muted"></span> <div>学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project</div> </li> <li><a href="/article/1950179614320029696.htm" title="python学习笔记(汇总)" target="_blank">python学习笔记(汇总)</a> <span class="text-muted">朕的剑还未配妥</span> <a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E6%95%B4%E7%90%86/1.htm">python学习笔记整理</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line</div> </li> <li><a href="/article/1950175578921431040.htm" title="Redis 分布式锁深度解析:过期时间与自动续期机制" target="_blank">Redis 分布式锁深度解析:过期时间与自动续期机制</a> <span class="text-muted">爱恨交织围巾</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1/1.htm">分布式事务</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/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/go/1.htm">go</a> <div>Redis分布式锁深度解析:过期时间与自动续期机制在分布式系统中,Redis分布式锁的可靠性很大程度上依赖于对锁生命周期的管理。上一篇文章我们探讨了分布式锁的基本原理,今天我们将聚焦于一个关键话题:如何通过合理设置过期时间和实现自动续期机制,来解决分布式锁中的死锁与锁提前释放问题。一、为什么过期时间是分布式锁的生命线?你的笔记中提到"服务挂掉时未删除锁可能导致死锁",这正是过期时间要解决的核心问题</div> </li> <li><a href="/article/1950175508729753600.htm" title="08.学习闭环三部曲:预习、实时学习、复习" target="_blank">08.学习闭环三部曲:预习、实时学习、复习</a> <span class="text-muted">0058b195f4dc</span> <div>人生就是一本效率手册,你怎样对待时间,时间就会给你同比例的回馈。单点突破法。预习,实时学习,复习。1、预习:凡事提前【计划】(1)前一晚设置三个当日目标。每周起始于每周日。(2)提前学习。预习法进行思考。预不预习效果相差20%,预习法学会提问。(3)《学会提问》。听电子书。2.实时学习(1)(10%)相应场景,思维导图,快速笔记。灵感笔记。(2)大纲,基本记录,总结篇。3.复习法则,(70%),最</div> </li> <li><a href="/article/1950165603524341760.htm" title="《如何写作》文心读书笔记" target="_blank">《如何写作》文心读书笔记</a> <span class="text-muted">逆熵反弹力</span> <div>《文心》这本书的文体是以讲故事的形式来讲解如何写作的,读起来不会觉得刻板。读完全书惊叹大师的文笔如此之好,同时感叹与此书相见恨晚。工作了几年发现表达能力在生活中越来越重要,不管是口语还是文字上的表达。有时候甚至都不能把自己想说的东西表达清楚,平时也有找过一些书来看,想通过提升自己的阅读量来提高表达能力。但是看了这么久的书发现见效甚微,这使得我不得不去反思,该怎么提高表达能力。因此打算从写作入手。刚</div> </li> <li><a href="/article/1950161706533580800.htm" title="SQL笔记纯干货" target="_blank">SQL笔记纯干货</a> <span class="text-muted">AI入门修炼</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/sql/1.htm">sql</a> <div>软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表</div> </li> <li><a href="/article/1950157326245752832.htm" title="《4D卓越团队》习书笔记 第十六章 创造力与投入" target="_blank">《4D卓越团队》习书笔记 第十六章 创造力与投入</a> <span class="text-muted">Smiledmx</span> <div>《4D卓越团队-美国宇航局的管理法则》(查理·佩勒林)习书笔记第十六章创造力与投入本章要点:务实的乐观不是盲目乐观,而是带来希望的乐观。用真相激起希望吉姆·科林斯在《从优秀到卓越》中写道:“面对残酷的现实,平庸的公司选择解释和逃避,而不是正视。”创造你想要的项目1.你必须从基于真相的事实出发。正视真相很难,逃避是人类的本性。2.面对现实,你想创造什么?-我想利用现有资源创造一支精干、高效、积极的橙</div> </li> <li><a href="/article/1950151583857700864.htm" title="2020-12-10" target="_blank">2020-12-10</a> <span class="text-muted">生活有鱼_727f</span> <div>今日汇总:1.学习了一只舞蹈2.专业知识抄了一遍3.讲师训作业完成今日不足之处:1.时间没管理好,浪费了很多时间到现在才做完明日必做:1.讲师训作业完成2.群消息做好笔记3.宽带安装</div> </li> <li><a href="/article/1950147339964444672.htm" title="【Druid】学习笔记" target="_blank">【Druid】学习笔记</a> <span class="text-muted">fixAllenSun</span> <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/oracle/1.htm">oracle</a> <div>【Druid】学习笔记【一】简介【1】简介【2】数据库连接池(1)能解决的问题(2)使用数据库连接池的好处【3】监控(1)监控信息采集的StatFilter(2)监控不影响性能(3)SQL参数化合并监控(4)执行次数、返回行数、更新行数和并发监控(5)慢查监控(6)Exception监控(7)区间分布(8)内置监控DEMO【4】Druid基本配置参数介绍【5】Druid相比于其他数据库连接池的优点</div> </li> <li><a href="/article/1950144473719697408.htm" title="微信公众号写作:如何通过文字变现?" target="_blank">微信公众号写作:如何通过文字变现?</a> <span class="text-muted">氧惠爱高省</span> <div>微信公众号已成为许多人分享知识、表达观点的重要平台。随着自媒体的发展,越来越多的人开始关注微信公众号上写文章如何挣钱的问题。本文将详细探讨微信公众号写作的盈利模式,帮助广大写作者实现文字变现的梦想。公众号流量主就找善士导师(shanshi2024)公众号:「善士笔记」主理人,《我的亲身经历,四个月公众号流量主从0到日入过万!》公司旗下管理800+公众号矩阵账号。代表案例如:爸妈领域、职场道道、国学</div> </li> <li><a href="/article/1950144218282389504.htm" title="为什么学习Web前端一定要掌握JavaScript?" target="_blank">为什么学习Web前端一定要掌握JavaScript?</a> <span class="text-muted">web前端学习指南</span> <div>为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。</div> </li> <li><a href="/article/1950143071731642368.htm" title="流利说懂你英语笔记要点句型·核心课·Level 8·Unit 3·Part 2·Video 1·Healing Architecture 1" target="_blank">流利说懂你英语笔记要点句型·核心课·Level 8·Unit 3·Part 2·Video 1·Healing Architecture 1</a> <span class="text-muted">羲之大鹅video</span> <div>HealingArchitecture1EveryweekendforaslongasIcanremember,myfatherwouldgetuponaSaturday,putonawornsweatshirtandhe'dscrapeawayatthesqueakyoldwheelofahousethatwelivedin.ps:从我记事起,每个周末,我父亲都会在周六起床,穿上一件破旧的运动衫</div> </li> <li><a href="/article/1950142042847899648.htm" title="java学习笔记8" target="_blank">java学习笔记8</a> <span class="text-muted">幸福,你等等我</span> <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/java/1.htm">java</a> <div>一、异常处理Error:错误,程序员无法处理,如OOM内存溢出错误、内存泄漏...会导出程序崩溃1.异常:程序中一些程序自身处理不了的特殊情况2.异常类Exception3.异常的分类:(1).检查型异常(编译异常):在编译时就会抛出的异常(代码上会报错),需要在代码中编写处理方式(和程序之外的资源访问)直接继承Exception(2).运行时异常:在代码运行阶段可能会出现的异常,可以不用明文处理</div> </li> <li><a href="/article/1950141538352820224.htm" title="2025.07 Java入门笔记01" target="_blank">2025.07 Java入门笔记01</a> <span class="text-muted">殷浩焕</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>一、熟悉IDEA和Java语法(一)LiuCourseJavaOOP1.一直在用C++开发,python也用了些,Java是真的不熟,用什么IDE还是问的同事;2.一开始安装了jdk-23,拿VSCode当编辑器,在cmd窗口编译运行,也能玩;但是想正儿八经搞项目开发,还是需要IDE;3.安装了IDEA社区版:(1)IDE通常自带对应编程语言的安装包,例如IDEA自带jbr-21(和jdk是不同的</div> </li> <li><a href="/article/1950140148146565120.htm" title="Java注解笔记" target="_blank">Java注解笔记</a> <span class="text-muted">m0_65470938</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、什么是注解Java注解又称Java标注,是在JDK5时引入的新特性,注解(也被称为元数据)Javaa注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程元素类、方法、成员变量等)进行关联二、注解的应用1.生成文档这是最常见的,也是iava最早提供的注解2.在编译时进行格式检查,如@Overide放在方法前,如果你这个方法并不是看盖了超类Q方法,则编译时就能检查</div> </li> <li><a href="/article/1950139769560297472.htm" title="Java 笔记 transient 用法" target="_blank">Java 笔记 transient 用法</a> <span class="text-muted"></span> <div>transient关键字用于标记不希望被序列化(Serialization)的字段。序列化是指将对象的状态保存到字节流中,以便将其传输或存储。当使用如ObjectOutputStream进行序列化时,transient修饰的字段将不会被序列化。✅1.使用场景避免序列化敏感信息privatetransientStringpassword;某些字段不需要持久化(如缓存、临时数据)privatetran</div> </li> <li><a href="/article/1950139768872431616.htm" title="Java 笔记 lambda" target="_blank">Java 笔记 lambda</a> <span class="text-muted">五行缺弦</span> <a class="tag" taget="_blank" href="/search/Java%E7%AC%94%E8%AE%B0/1.htm">Java笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>✅Lambda基本语法(parameters)->expression或(parameters)->{statements}//无参数Runnabler=()->System.out.println("Hello");//单个参数(小括号可省略)Consumerc=s->System.out.println(s);//多参数+多语句Comparatorcomp=(a,b)->{System.out</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>