[TOC]
## 1. 變量和數據類型
### 1.1 定義和賦值變量
var 變量名=值;
> 1. 使用var關鍵詞定義變量,var可以省略的,但是不建議省略var
> 2. 在js中可以重復定義變量,后面定義的變量會覆蓋前面的變量。
> 3. js是弱類型語言,使用var來定義任何數據類型
> 4. js中變量的類型是由變量的值決定的,所以只定義不賦值的變量,就是一個未賦值變量(undefined),未賦值的變量不能使用
> 5. typeof(變量): 查看變量的數據類型
>
#### 變量的作用域
變量的作用域無非就是兩種:全局變量和局部變量。
1. 函數內部可以直接讀取全局變量。
2. 在函數外部自然無法讀取函數內的局部變量。
3. 函數內部聲明變量的時候,一定要使用var命令。如果不用的話,你實際上聲明了一個全局變量!
### 1.2 js的數據類型分類(四種):
> 1. number: 無論整數還是小數,都是number類型
> 2. string: 無論字符還是字符串,都是string類型
> 3. boolean
> 4. object 對象類型
~~~
var a = 10;
//var a = 20;
var b = 3.14;
var c = 'c';
var d = "hello";
var e = true;
var f = new Object();
document.write("a的值為:"+a +",a的數據類型是:"+typeof(a)+"<br/>");
document.write("b的值為:"+b +",b的數據類型是:"+typeof(b)+"<br/>");
document.write("c的值為:"+c +",c的數據類型是:"+typeof(c)+"<br/>");
document.write("d的值為:"+d +",d的數據類型是:"+typeof(d)+"<br/>");
document.write("e的值為:"+e +",e的數據類型是:"+typeof(e)+"<br/>");
document.write("f的值為:"+f +",f的數據類型是:"+typeof(f)+"<br/>");
~~~
### 1.3 類型轉換函數
1. string->整數: parseInt(變量)
使用parseInt函數轉換時,轉換的內容中的第一個是數值類型,就可以繼續轉換,直到遇到非數組類型為止。
2. string->小數: parseFloat(變量)
~~~
*/
var a = "10";
a = "10a";
document.write("a的類型是(轉換前):"+typeof(a)+"<br/>");
//轉換
a = parseInt(a);
document.write("a的類型是(轉換后):"+typeof(a)+",值為:"+a+"<br/>");
var b = "3.14";
b = parseFloat(b);
document.write("b的類型是(轉換后):"+typeof(b)+",值為:"+b+"<br/>");
~~~
### 1.4 運算符
> 1. 算術運算符: + - * / %
> 2. 比較運算符: > < >= <= ==
> 3. 邏輯運算符: && || !
> 4. 三目運算符: 表達式 ? true的結果 : false的結果
在js中,布爾值可以用true用1來代表,false用0來代表(可用于數學運算)
~~~
var a = 10;
var b = false;
document.write("結果為:"+(a/b)+"<br/>");
document.write("結果為:"+(a+b)+"<br/>");
~~~
### 1.5 流程控制語句
#### 1.5.1 if 語句
~~~
if語句
if(表達式){
語句
}else{
語句
}
~~~
條件可以是:
1. 布爾值
true:成立 ; false:不成立
2. number
非0(包括負數):成立; 0: 不成立
3. string
非空字符串: 成立 ; 空字符串: 不成立
4. object
非null: 成立; null:不成立
#### 1.5.2 swtich語句
~~~
swtich(變量){
case 選項1:
語句;
break; # 不break,就會繼續下面選項的語句
case 選項2::
語句;
break;
default:
默認;
}
~~~
** case的條件: **
> 1. 可以是常量. string,number
> 2. 可以是變量。(java是不能是變量)
> 3. 可以是表達式 (java不能這樣)
#### 1.5.3 for語句
~~~
for(初始化語句;判斷進入條件;步長語句){
語句
}
~~~
#### 1.5.4 while語句
~~~
while(表達式){ true的時候才進入循環
語句
}
~~~
#### 1.5.5 do-while
~~~
do{
語句
}while(表達式)
~~~
#### 1.5.6 for-in語句:
1. 遍歷數組
2. 遍歷對象屬性(遍歷對象的成員變量和方法)
~~~
for(var 遍歷 in 數組|對象){
}
~~~
~~~
var arr = [10,20,30,40];
//遍歷數組
//使用for循環
for(var i=0;i<arr.length;i++){
document.write(arr[i]+",");
}
document.write("<hr/>");
//使用for-in遍歷數組
for(var i in arr){
document.write(arr[i]+",");
}
*/
//定義對象
function Person(name,age){
this.name = name;
this.age = age;
}
//創建對象
var p = new Person("eric",20);
//遍歷對象
for(var i in p){
document.write(p[i]+"<br/>");
}
~~~
#### 1.5.7 with
每次在向瀏覽器寫入東西的時候,document.write("內容"),每次都要寫document,使用with就可以簡化書寫
~~~
with(對象){
直接寫該對象的方法實現調用,而不用寫對象點的形式調用
}
~~~
例如:
~~~
with(document){
for(var i=1;i<=5;i++){
for(var j=1;j<=i;j++){
write("* "); // 不用document.write
}
write("<br/>");
}
write("<hr/>");
for(var i=1;i<=9;i++){
for(var j=1;j<=i;j++){
write(i+"*"+j+"="+(i*j)+" ");
}
write("<br/>");
}
~~~
### 1.6 函數
~~~
函數定義:
function 函數名稱(形式參數列表){
語句
}
~~~
> 1. js的函數使用function定義,但是形式參數列表不能使用var關鍵詞
> 2. js的函數可以有返回值,直接使用return關鍵詞返回即可,不需要聲明返回值類型
> 3. js沒有方法重載的概念,后面定義的函數會覆蓋前面的函數。
> 4. js中的形式參數和實際參數的數量可以不一致,依然可以調用。
> 5. js的每個函數中都隱藏了一個叫arguments的數組,這個數組用于接收函數調用時傳遞過來的實際參數值。
> 6. arguments數組接收完實際參數后,會逐一的依次從左到右賦值給形式參數,如果實際參數數量大于形式參數,則丟失剩下的實際參數
### 1.7 基于對象編程(內置對象)
#### 1.7.1 String對象
##### 生成String對象的方法
1. new String()
~~~
var str1 = new String("hello");
var str2 = new String("hello");
document.write("結果:"+(str1==str2)+"<br/>"); //false,比較對象地址
document.write("結果:"+(str1.valueOf()==str2.valueOf())); //true,比較對象內容
~~~
2. 字符串
~~~
var str1 = "hello";
var str2 = "hello";
document.write("結果:"+(str1==str2)+"<br/>"); //true,存在于常量池中的同一個String對象
~~~
##### 常用方法
> 1. charAt(): 返回指定索引的內容
> 2. indexOf(): 返回首次出現指定字符的索引位置
> 3. lastIndexOf(): 返回最后出現指定字符的索引位置
> 4. fontcolor(): 直接給字符串添加顏色
> 5. replace(): 替換指定的字符串
> 6. split(): 使用指定字符串切割字符串,返回字符串數組
> 7. substring(start,end); 截取字符串,start:開始索引, end:結束索引
> 8. substr(strat,[length]) 截取字符串, start:開始索引 length: 截取的字符串長度
#### 1.7.2 Number對象
類似于String
~~~
var num1 = new Number(20);
var num2 = new Number(20);
var num1 = 20;
var num2 = 20;
~~~
#### 1.7.3 Boolean對象
#### 1.7.5 Math對象
> 1. ceil(): 向上取整。 如果有小數部分的話,直接+1
> 2. floor(): 向下取整。如果有小數部分的話,直接丟失小數部分,保利整數位
> 3. round(): 四舍五入取整。滿5進一
> 4. random(): 生成一個隨機的0-1的小數 .包含0,不包含1
> 5. max(): 返回最大值
> 6. min(): 返回最小值
>
~~~
var num = 3.50;
document.write(Math.ceil(num)+"<br/>"); //4
document.write(Math.floor(num)+"<br/>"); //3
document.write(Math.round(num)+"<br/>"); //4
document.write(Math.round(Math.random()*100)+"<br/>");
document.write(Math.max(10,6,54,23,76)+"<br/>"); //76
document.write(Math.min(10,6,54,23,76)+"<br/>"); //6
~~~
#### 1.7.6 Date對象
##### 創建對象
~~~
var date = new Date(); //取當前系統日期時間 java: SimpleDateFormat對象 yyyy-MM-dd 格式化
//document.write(date); //默認格式
//年份
document.write(date.getFullYear()+"年");
//月
document.write((date.getMonth()+1)+"月");
//日
document.write(date.getDate()+"日");
//星期
document.write("星期"+date.getDay()+" ");
//時
document.write(date.getHours()+"時");
//分
document.write(date.getMinutes()+"分");
//秒
document.write(date.getSeconds()+"秒");
~~~
##### 網頁時鐘
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>網頁時鐘</title>
</head>
<body>
當前的日期為:<span id="dateTip"></span>
</body>
<script type="text/javascript">
function genNewDate(){
//生成一個系統的當前時間,格式:2015-06-01 15:22:30
var date = new Date();
//當前日期時間的字符串
var dateStr = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
//把日期字符串放到span中
//得到span對象
var dateTip = document.getElementById("dateTip"); //讀到了沒有加載的標簽,無法讀取的
//設置span的innerHTMl屬性給span賦值
dateTip.innerHTML=dateStr;
}
//設置定時器,每個多少毫秒調用1次任務(函數)
window.setInterval("genNewDate()",1000); //每秒鐘調用一次genNewDate函數去更新時間
</script>
</html>
~~~
#### 1.7.7 Array數組對象
1. 數組的長度會隨著元素的添加而變化,不用擔心出現索引位置越界的異常。
2. js的數組可以存放任意類型的元素。
##### 創建數組
1. new
~~~
//1.1 指定數組長度
//var arr = new Array(3);
//1.2 不指定數組長度、默認0個元素
//var arr = new Array();
//1.3 指定具體內容
//var arr = new Array(10,"hello",true);
~~~
2. 直接指定內容
~~~
var arr = [10,"java",false];
arr[0]=10;
arr[1]="hello";
arr[2]=true;
for(var i=0;i<arr.length;i++){
document.write(arr[i]+",");
}
~~~
##### 常用的方法:
1. join(字符串): 使用指定的字符串,把數組的所有元素連接在一起,最終組成一個新的字符串
2. reverse(): 反轉數組中的元素
~~~
var arr = ["java","net","php","ios"];
var str = arr.join("-");
document.write(str);
for(var i=0;i<arr.length;i++){
document.write(arr[i]+",");
}
document.write("<hr/>");
//反轉
arr = arr.reverse();
for(var i=0;i<arr.length;i++){
document.write(arr[i]+",");
}
~~~
### 1.8 自定義對象
java:使用class來定義對象
javascript: 使用function來定義對象
#### 1.8.1 有參數的構造函數
~~~
//定義對象
function 對象名稱(形式參數){
定義屬性
定義方法
}
//創建對象
var 變量 = new 對象名稱(實際參數);
~~~
例:定義人對象
~~~
function Person(name,age){ //this: 表示當前調用的對象
//定義屬性 賦值
this.name = name;
this.age = age;
//定義方法
this.say = function(){
alert("這個對象的方法");
}
}
//創建人對象
var p = new Person("狗娃",12);
~~~
#### 1.8.2 無參數的構造函數
通過追加屬性填值
~~~
//定義對象
function Person(){
}
//創建對象
var p = new Person();
//追加屬性
p.name = "狗剩";
p.age = 14;
//追加方法
p.say = function(){
alert("狗剩的函數");
}
~~~
#### 1.8.3 使用Object對象。 Object對象可以作為任意對象的模板
~~~
//創建對象
var p = new Object();
//追加屬性
p.name = "狗蛋";
p.age = 16;
//追加方法
p.say = function(){
alert("狗蛋的函數");
}
~~~
#### 1.8.4 使用字面量的形式創建對象(json)
~~~
//直接創建人對象
var p = {
//定義屬性(屬性名:屬性值)
"name":"鐵蛋",
"age": 20,
//定義方法
"say":function(){
alert("鐵蛋的函數");
}
};
//查看屬性值
document.write(p.name);
document.write(p.age);
//調用對象方法
p.say();
document.write("<br/>");
//使用for-in遍歷對象(成員變量和方法)
for(var i in p){
document.write(p[i]+"<br/>");
}
~~~
### 1.9 原型
1. js的每個對象中都包含有了原型屬性(prototype)
2. 如果往某個對象的原型屬性添加了方法,那么添加的這個方法就會自動地添加到當前對象的方法中。
3. 原型的作用:給內置對象追加方法的
~~~
/*
給Array追加一個search和max方法
*/
Array.prototype.search = function(target){
//遍歷
for(var i=0;i<this.length;i++){
if(this[i]==target){
return i;
}
}
return -1; //找不到就是-1
}
Array.prototype.max = function(){
//存儲最大值
var max = this[0];
for(var i=1;i<this.length;i++){
if(this[i]>max){
max = this[i];
}
}
return max;
}
var arr = [10,43,21,65,3,87];
var index = arr.search(87);
document.write("位置是:"+index+"<br/>");
var max = arr.max();
document.write("最大值:"+max);
~~~
- Docker
- 什么是docker
- Docker安裝、組件啟動
- docker網絡
- docker命令
- docker swarm
- dockerfile
- mesos
- 運維
- Linux
- Linux基礎
- Linux常用命令_1
- Linux常用命令_2
- ip命令
- 什么是Linux
- SELinux
- Linux GCC編譯警告:Clock skew detected. 錯誤解決辦法
- 文件描述符
- find
- 資源統計
- LVM
- Linux相關配置
- 服務自啟動
- 服務器安全
- 字符集
- shell腳本
- shell命令
- 實用腳本
- shell 數組
- 循環與判斷
- 系統級別進程開啟和停止
- 函數
- java調用shell腳本
- 發送郵件
- Linux網絡配置
- Ubuntu
- Ubuntu發送郵件
- 更換apt-get源
- centos
- 防火墻
- 虛擬機下配置網絡
- yum重新安裝
- 安裝mysql5.7
- 配置本地yum源
- 安裝telnet
- 忘記root密碼
- rsync+ crontab
- Zabbix
- Zabbix監控
- Zabbix安裝
- 自動報警
- 自動發現主機
- 監控MySQL
- 安裝PHP常見錯誤
- 基于nginx安裝zabbix
- 監控Tomcat
- 監控redis
- web監控
- 監控進程和端口號
- zabbix自定義監控
- 觸發器函數
- zabbix監控mysql主從同步狀態
- Jenkins
- 安裝Jenkins
- jenkins+svn+maven
- jenkins執行shell腳本
- 參數化構建
- maven區分環境打包
- jenkins使用注意事項
- nginx
- nginx認證功能
- ubuntu下編譯安裝Nginx
- 編譯安裝
- Nginx搭建本地yum源
- 文件共享
- Haproxy
- 初識Haproxy
- haproxy安裝
- haproxy配置
- virtualbox
- virtualbox 復制新的虛擬機
- ubuntu下vitrualbox安裝redhat
- centos配置雙網卡
- 配置存儲
- Windows
- Windows安裝curl
- VMware vSphere
- 磁盤管理
- 增加磁盤
- gitlab
- 安裝
- tomcat
- Squid
- bigdata
- FastDFS
- FastFDS基礎
- FastFDS安裝及簡單實用
- api介紹
- 數據存儲
- FastDFS防盜鏈
- python腳本
- ELK
- logstash
- 安裝使用
- kibana
- 安準配置
- elasticsearch
- elasticsearch基礎_1
- elasticsearch基礎_2
- 安裝
- 操作
- java api
- 中文分詞器
- term vector
- 并發控制
- 對text字段排序
- 倒排和正排索引
- 自定義分詞器
- 自定義dynamic策略
- 進階練習
- 共享鎖和排它鎖
- nested object
- 父子關系模型
- 高亮
- 搜索提示
- Redis
- redis部署
- redis基礎
- redis運維
- redis-cluster的使用
- redis哨兵
- redis腳本備份還原
- rabbitMQ
- rabbitMQ安裝使用
- rpc
- RocketMQ
- 架構概念
- 安裝
- 實例
- 好文引用
- 知乎
- ACK
- postgresql
- 存儲過程
- 編程語言
- 計算機網絡
- 基礎_01
- tcp/ip
- http轉https
- Let's Encrypt免費ssl證書(基于haproxy負載)
- what's the http?
- 網關
- 網絡IO
- http
- 無狀態網絡協議
- Python
- python基礎
- 基礎數據類型
- String
- List
- 遍歷
- Python基礎_01
- python基礎_02
- python基礎03
- python基礎_04
- python基礎_05
- 函數
- 網絡編程
- 系統編程
- 類
- Python正則表達式
- pymysql
- java調用python腳本
- python操作fastdfs
- 模塊導入和sys.path
- 編碼
- 安裝pip
- python進階
- python之setup.py構建工具
- 模塊動態導入
- 內置函數
- 內置變量
- path
- python模塊
- 內置模塊_01
- 內置模塊_02
- log模塊
- collections
- Twisted
- Twisted基礎
- 異步編程初探與reactor模式
- yield-inlineCallbacks
- 系統編程
- 爬蟲
- urllib
- xpath
- scrapy
- 爬蟲基礎
- 爬蟲種類
- 入門基礎
- Rules
- 反反爬蟲策略
- 模擬登陸
- problem
- 分布式爬蟲
- 快代理整站爬取
- 與es整合
- 爬取APP數據
- 爬蟲部署
- collection for ban of web
- crawlstyle
- API
- 多次請求
- 向調度器發送請求
- 源碼學習
- LinkExtractor源碼分析
- 構建工具-setup.py
- selenium
- 基礎01
- 與scrapy整合
- Django
- Django開發入門
- Django與MySQL
- java
- 設計模式
- 單例模式
- 工廠模式
- java基礎
- java位移
- java反射
- base64
- java內部類
- java高級
- 多線程
- springmvc-restful
- pfx數字證書
- 生成二維碼
- 項目中使用log4j
- 自定義注解
- java發送post請求
- Date時間操作
- spring
- 基礎
- spring事務控制
- springMVC
- 注解
- 參數綁定
- springmvc+spring+mybatis+dubbo
- MVC模型
- SpringBoot
- java配置入門
- SpringBoot基礎入門
- SpringBoot web
- 整合
- SpringBoot注解
- shiro權限控制
- CommandLineRunner
- mybatis
- 靜態資源
- SSM整合
- Aware
- Spring API使用
- Aware接口
- mybatis
- 入門
- mybatis屬性自動映射、掃描
- 問題
- @Param 注解在Mybatis中的使用 以及傳遞參數的三種方式
- mybatis-SQL
- 逆向生成dao、model層代碼
- 反向工程中Example的使用
- 自增id回顯
- SqlSessionDaoSupport
- invalid bound statement(not found)
- 脈絡
- beetl
- beetl是什么
- 與SpringBoot整合
- shiro
- 什么是shiro
- springboot+shrio+mybatis
- 攔截url
- 枚舉
- 圖片操作
- restful
- java項目中日志處理
- JSON
- 文件工具類
- KeyTool生成證書
- 兼容性問題
- 開發規范
- 工具類開發規范
- 壓縮圖片
- 異常處理
- web
- JavaScript
- 基礎語法
- 創建對象
- BOM
- window對象
- DOM
- 閉包
- form提交-文件上傳
- td中內容過長
- 問題1
- js高級
- js文件操作
- 函數_01
- session
- jQuery
- 函數01
- data()
- siblings
- index()與eq()
- select2
- 動態樣式
- bootstrap
- 表單驗證
- 表格
- MUI
- HTML
- iframe
- label標簽
- 規范編程
- layer
- sss
- 微信小程序
- 基礎知識
- 實踐
- 自定義組件
- 修改自定義組件的樣式
- 基礎概念
- appid
- 跳轉
- 小程序發送ajax
- 微信小程序上下拉刷新
- if
- 工具
- idea
- Git
- maven
- svn
- Netty
- 基礎概念
- Handler
- SimpleChannelInboundHandler 與 ChannelInboundHandler
- 網絡編程
- 網絡I/O
- database
- oracle
- 游標
- PLSQL Developer
- mysql
- MySQL基準測試
- mysql備份
- mysql主從不同步
- mysql安裝
- mysql函數大全
- SQL語句
- 修改配置
- 關鍵字
- 主從搭建
- centos下用rpm包安裝mysql
- 常用sql
- information_scheme數據庫
- 值得學的博客
- mysql學習
- 運維
- mysql權限
- 配置信息
- 好文mark
- jsp
- jsp EL表達式
- C
- test