整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          那些吃灰產品的「正確」用法

          那些吃灰產品的「正確」用法


          它們通通變成數(shù)字時鐘吧!

          前段時間,一個「Kindle 疑似退出中國市場」的新聞登上熱搜,很多人這才想起被自己冷落許久的 Kindle。雖然經常被吐槽為壓泡面神器,但事實往往更殘酷,大多數(shù)人即使是泡面時也懶得翻出它——假如就在手邊能隨時拿到,那也算不上是壓箱底了。(看到這里,你可以把自己的 Kindle 拿出來充充電了)

          在吃灰列表中,Kindle 只是最常被吐槽的那個,像它一樣被打入冷宮的產品還有不少。過時或已經損壞的電子產品已經失去了其使用價值,情懷玩家只是拿來收藏。除了放在抽屜里吃灰,還有什么方法可以讓它們「發(fā)揮余熱」嗎?


          Kindle

          先來說說 Kindle。網上很多人曬出的圖都顯示電量不足,也有人提供了一種新用法,把 Kindle 當數(shù)字時鐘。Kindle 官方系統(tǒng)自然是不能隨便安裝應用,需要用「網頁瀏覽器」來實現(xiàn)。

          • 輸入網址:http://k.ilib.io/u/clock.html
          • 在主頁搜索:~ds,回車

          通過代碼能讓 Kindle 進入常亮狀態(tài)(重啟可以恢復),建議將背光亮度調到最低,同時打開飛行模式,這樣能讓續(xù)航時間長一點。


          Switch

          不知道有多少人是為健身環(huán)買了 Switch?能堅持鍛煉(變禿)變強的人只是少數(shù),更多人是一時沖動。如果你本身不是重度玩家,又找不到人一起玩聚會游戲,Switch 的使用場景其實很少,最終難逃吃灰命運。

          任天堂官方出了一個《AAA 時鐘》,售價 79 港元。是的你沒有看錯,它的功能就是讓你的 Switch 顯示數(shù)字時鐘,顏值相當贊,可切換 24 小時制、更改顏色樣式。配合顏色豐富的手柄或貼紙保護套,放在桌上當擺件也是不錯的。

          這款鬧鐘軟體中還附送了一個游戲,類似 Chrome 的斷網小恐龍,沒什么游戲體驗。

          吃灰的還有健身環(huán),健身器材怎么二次利用,不用我多說了吧?

          圖片來源于網絡


          iPad/iPhone/Android

          iPad 的情況比前兩者好一點,雖然不是所有人都把它當「生產力工具」使用,不過至少也能看看愛奇藝。iPad 的使用場景被手機電腦搶走許多,這么大又優(yōu)秀的屏幕,放著實在是浪費,不如——把它變成數(shù)字時鐘吧!

          iPad 時鐘應用我推薦「謎底時鐘」,樣式比較豐富,還帶音效,可以利用快捷指令設置為充電時自動運行,或者添加小組件到桌面。

          謎底時鐘也有 iPhone 版本,推薦給家里有舊 iPhone 的朋友。

          安卓端的時鐘應用就多了,或者還有一種選擇,買一個「堅果鬧鐘式無線充電座」,二手市場價格不到百元,幾款支持無線充電的堅果手機可以直接放上去顯示翻頁鬧鐘,其他品牌需要安裝「堅果時鐘」App。


          舊物改造

          上面介紹的是過時或者使用場景較少的產品,并不是不能用,有的產品是真的完全失去了使用價值。

          最近流行把數(shù)碼零件裝進展示框的玩法,有人把這做成了一門生意,你可以直接購買到裱好的成品來收藏:

          (某寶店鋪:尋樂造物)

          有人把電路板做成了項鏈:

          某寶店鋪:1ceas

          時尚圈和數(shù)碼圈的組合也很有意思,AirPods 可以當配飾使用:

          圖片來源:《Vogue》

          人們購買數(shù)碼產品時,大多把實用性放在第一位,買之前會詳細對比價格和參數(shù),設想好了各種用法。但事與愿違,人每天可支配的時間有限,而數(shù)碼領域最不缺的就是新品迭代。當舊的物件失去其使用價值,除了賣二手之外,不如想想如何才能讓自己不要忘記它。


          本文作者:劉丟丟

          本文首發(fā)于極客之選,轉載請聯(lián)系極客君(ID:geekparker)。

          不久用JS+html<canvas>標簽實現(xiàn)了簡易時鐘(見HTML使用Canvas繪制動畫時鐘),最近學習C/C++語言(話說怎么區(qū)分寫的是c還是c++?),恰好看到一個有趣的繪圖庫EasyX,拿它來練練手,就先做個簡易時鐘看看吧。

          EasyX Graphics Library 是針對 Visual C++ 的免費繪圖庫,支持 VC6.0 ~ VC2022。EasyX可以幫助 C/C++ 初學者快速上手圖形和游戲編程。

          比如,可以基于 EasyX 圖形庫很快的用幾何圖形畫一個房子,或者一輛移動的小車,可以編寫俄羅斯方塊、貪吃蛇、黑白棋等小游戲,可以練習圖形學的各種算法,等等。

          簡單了解了EasyX后,就可以開干了。本文開發(fā)環(huán)境是windows 11和Visual Studio 2022。首先打開vs2022并創(chuàng)建一個空的控制臺項目,在項目里新建main.cpp,#include EasyX的頭文件graphics.h。提示:由于EasyX是針對C++的繪圖庫,必須用cpp文件來開發(fā)編譯,但是編碼可以是c也可以是c++。

          EasyX使用非常簡單,可以一邊閱讀EasyX在線文檔(https://docs.easyx.cn/zh-cn/intro)一邊開發(fā)。基本流程:

          #include <graphics.h>		// 引用圖形庫頭文件
          int main()
          {
          	initgraph(600, 400);	// 創(chuàng)建繪圖窗口,大小為 600x400 像素
          	//繪圖操作
          	closegraph();			// 關閉繪圖窗口
          	return 0;
          }

          下面基于以上基礎代碼逐步添加。

          準備工作

          由于EasyX默認情況下生成的繪圖界面是黑色的背景,我們可以使用setbkcolor函數(shù)更改界面背景色為白色:

          setbkcolor(WHITE);
          cleardevice(); //設置背景色后要清除設備才能生效
          setlinecolor(BLACK);//設置線條顏色(白底黑線)

          在 EasyX 中,坐標分兩種:物理坐標和邏輯坐標。

          物理坐標是描述設備的坐標體系。

          坐標原點在設備的左上角,X 軸向右為正,Y 軸向下為正,度量單位是像素。

          坐標原點、坐標軸方向、縮放比例都不能改變。

          邏輯坐標是在程序中用于繪圖的坐標體系。

          坐標默認的原點在窗口的左上角,X 軸向右為正,Y 軸向下為正,度量單位是點。

          默認情況下,邏輯坐標與物理坐標是一一對應的,一個邏輯點等于一個物理像素。

          默認原點(0,0)在繪圖窗口的左上角,示例中為了方便繪制時鐘,將原點修改為窗口的中心點:

          //假設窗口大小為600x400,則中心點為(600/2,400/2)
          setorigin(300,200);
          //坐標原點設置成功后,(300,200)位置即為繪圖坐標的原點(0,0)

          為方便代碼編寫,先定義了幾個常量:

          #define W 800	//窗口寬度
          #define H 620	//窗口高度
          #define oY H/2	//調整坐標原點y為窗口高度的一半
          #define R 290	//時鐘內圓半徑
          #define PI 3.14
          #define HD PI/180 //因需多次計算弧度,提前算出部分公共值
          #define R_2 R/2

          繪制鐘面內外框

          時鐘可以分成鐘面外框、大小刻度和指針。由于指針指向是需要隨時間動態(tài)變化,因此不能固定不變。而鐘面外框是固定不變的,可以只繪制一次。(大小刻度也是固定不變的,但是由于與秒針行走路徑有重疊,也要動態(tài)繪制)

          示例中鐘面外框繪制成兩個大圓,都有一定的寬度。

          繪制圓形的函數(shù)是void circle( int x, int y, int radius );參數(shù)分別是圓心的x、y坐標以及半徑長度,如果要繪制寬度,可以使用setlinestyle()函數(shù)設置線條的形狀和寬度:

          setlinecolor(BLACK);//設置線條顏色
          setlinestyle(PS_SOLID, 10);//設置線條樣式和寬度
          circle(0, 0, oY - 10); //繪制時鐘外黑框
          //畫出時鐘的內框
          setlinestyle(PS_SOLID, 4);
          circle(0, 0, R);
          setlinestyle(PS_SOLID, 1);//繪制完鐘面內外兩個框后恢復線條寬度為1

          繪制鐘面內外兩個框

          繪制大小刻度和12個數(shù)字

          由于大小刻度與指針有部分重疊,因此也要跟隨指針一起反復動態(tài)繪制。因此都將它們放入一個while循環(huán)中。

          示例中,大刻度畫小實心圓,小刻度畫短線條。畫刻度和指針都需要定位坐標,需要用上數(shù)學計算,須先引入頭文件math.h。具體的坐標計算方法可以自行度娘或看前一篇js+canvas繪制時鐘,里面有簡單的解釋。

          setfillcolor(BLACK);//大刻度實心小圓的填充色(黑色)
          double _x, _y;
          TCHAR s[3];
          settextcolor(BLACK);
          LOGFONT f;
          gettextstyle(&f);
          f.lfHeight=36; //設置字體大小
          _tcscpy_s(f.lfFaceName, _T("serif")); //設置字體名稱
          f.lfQuality=ANTIALIASED_QUALITY;	//設置字體平滑效果
          settextstyle(&f);
          
          for (int j=9, i=0; i < 12; j++, i++) {//由于坐標0度指向刻度3,所以有針對性地修正一下
          	if (i > 2) { j=i - 3; }
          	int _t=j * 30;//每個大格30度,用于下面的弧度計算
          	_x=cos(HD * _t) * (R - 5);
          	_y=sin(HD * _t) * (R - 5);//計算大刻度的圓心坐標
          
          	fillcircle(_x, _y, 5);//繪制大刻度
          //開始繪制文字,先計算文字顯示位置的矩形坐標
          	swprintf_s(s, _T("%d"), i==0 ? 12 : i);
          	RECT tr;//定義文字矩形結構
          	if (j==10) {//修正部分矩形形狀,j==10指向1時
          		tr.left=_x - 50;
          		tr.top=_y;
          		tr.right=_x;
          		tr.bottom=_y + 50;
          	}else if(j==4){//指向7時
          		tr.left=_x +50;
          		tr.top=_y;
          		tr.right=_x;
          		tr.bottom=_y -50;
          		
          	}else if (j==1) {//指向4時
          		tr.left=_x - 50;
          		tr.top=_y - 50;
          		tr.right=_x;
          		tr.bottom=sin(HD * (5+_t)) * (R - 5);
          	}else if( j==7) {//指向10時
          		tr.left=_x+10;
          		tr.top=sin(HD * (5 + _t)) * (R - 5);
          		tr.right=_x+50;
          		tr.bottom=_y+50;
          	}else {
          		tr.left=cos(HD * (_t - 5 < 0 ? 355 : _t - 5)) * (R);
          		tr.top=sin(HD * (_t - 5 < 0 ? 355 : _t - 5)) * (R);
          		tr.right=cos(HD * (_t + 5)) * (R - 70);
          		tr.bottom=sin(HD * (_t + 5)) * (R - 70);
          	}
          	//簡單地繪制12個數(shù)字,如果有更好的定位方式歡迎告知,謝謝。
          	drawtext(s, &tr, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
          //繪制60個小刻度
          setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 3);
          double xx=0;
          for (int j=0, i=0; i < 60; i++) {
          	j=i - 15;
          	if (j < 0) { j=60 + j; }
          	if (j % 5==0) { continue; }
          	xx=HD * j * 6;
          	line(cos(xx) * (R - 10), sin(xx) * (R - 10), cos(xx) * (R - 5), sin(xx) * (R - 5));
          }
          //繪制圓心
          fillcircle(0, 0, 8);

          效果圖:

          繪制大小刻度和圓心

          繪制指針

          指針有三種,時針粗短,分針適中,秒針細長,示例中將秒針繪制成紅色以示區(qū)別。指針的位置是根據(jù)時間動態(tài)更新的,所以先要獲取當前的系統(tǒng)時間,可以簡單地引入time.h頭文件。

          //繪制時針,參數(shù)為當前時,分,秒
          void drawHp(int h,int m,int s) {
          	h -=3;
          	if (h < 0) {
          		h=12 + h;
          	}
          	double hd=HD * h * 30 + PI/360 * m +PI/21600 * s;
          	int _x=cos(hd) * (R_2+10);
          	int _y=sin(hd) * (R_2+10);
          	drawPt(_x, _y, 8);
          }
          //繪制分針,參數(shù)為當前分,秒
          void drawMp(int h,int s) {
          	h -=15;
          	if (h < 0) {
          		h=60+h;
          	}
          	double hd=HD * (double)(h + s / static_cast<double>(60)) * 6;
          	int _x=cos(hd) * (R_2+40);
          	int _y=sin(hd) * (R_2+40);
          	drawPt(_x, _y, 5);
          }
          //繪制秒針,參數(shù)為當前秒
          void drawSp(int h) {
          	h -=15;
          	if (h < 0) {
          		h=60 + h;
          	}
          	double hd=HD * h * 6;
          	int _x=cos(hd) * (R_2 + 120);
          	int _y=sin(hd) * (R_2 + 120);
          	
          	drawPt(_x, _y, 2);
          }
          //根據(jù)指針x、y坐標真實繪制指針
          void drawPt(int x, int y,int w) {
          	if (w==2) {
          		setlinecolor(RED);
          	}
          	setlinestyle(PS_SOLID | PS_JOIN_ROUND | PS_ENDCAP_ROUND, w);
          	line(0, 0, x, y);
          	setlinecolor(BLACK);
          }

          調用方式:

          time_t now=time(NULL);
          struct tm info;
          localtime_s(&info,&now);//獲得本地時間
          int hour=info.tm_hour;
          int minute=info.tm_min;
          int second=info.tm_sec;
          
          drawHp(hour,minute,second);
          drawMp(minute,second);
          drawSp(second);

          讓我們看看效果如何。

          繪制了指針的時鐘,出現(xiàn)了好多的秒針軌跡

          哈哈,鬧笑話了。由于我們在實時地?計算新的指針坐標并更新繪制新的指針位置,因此界面上繪制出了很多的秒針軌跡。怎么解決呢?方法肯定是有的,可以繪制前先清除設備(調用cleardevice()函數(shù),將清除整個繪圖窗口),我們這里不打算清除全部,只把鐘面圓框內的部分清除:

          clearcircle(0, 0, oY-25);//先清除內圓框之內的全部
          //然后再寫動態(tài)繪圖刻度和指針的代碼

          看看效果如何:

          到此為止,一個簡單的時鐘已經繪制完成了。但是你可能發(fā)現(xiàn)有點小問題:界面有時會閃爍一下。這是由于動態(tài)更新指針位置并實時繪制出來造成的閃爍,可以使得經典的雙緩沖技術來解決。EasyX很貼心地提供了這個技術,只需要三個函數(shù):

          BeginBatchDraw();
          while(true){
            //反復的繪制操作
          	FlushBatchDraw();
          }
          EndBatchDraw();

          就是這么簡單。在我們的示例代碼中加上它們就行了。

          簡單優(yōu)化:節(jié)流

          示例中將動態(tài)時間計算和實時更新繪圖都放在了while循環(huán)中,計算機超強的計算速度下,每秒可將會計算非常多次,示例中時鐘是按秒走的,我們可以采用節(jié)流思想,在一段時間的指定時間間隔內只執(zhí)行一次回調函數(shù),限制在一定時間內的執(zhí)行次數(shù),從而控制高頻率觸發(fā)的事件,避免過多的計算或操作影響性能。最簡單的做法是一次繪圖更新完成后,sleep一定時間。也可以根據(jù)系統(tǒng)時鐘打點數(shù)計算fps:

          const clock_t FPS=1000 / 2;//每秒只執(zhí)行兩次
          clock_t startTime, freamTime;
          while (true) {
          	//計算幀率
          		startTime=clock();
          		freamTime=clock() - startTime;
          
          		if (freamTime < FPS)
          		{
          			Sleep(FPS - freamTime);
          		}
            //將各種動態(tài)繪圖代碼寫在此處
          }

          完整代碼(Visual stdio 2022 編譯通過)

          .昨日回顧

          函數(shù)

          函數(shù)的概念:將一段常用代碼進行命名,這個名稱就叫“函數(shù)”。

          函數(shù)的步驟:(1)先定義函數(shù),函數(shù)定義后不能直接執(zhí)行,必須調用函數(shù),函數(shù)才會執(zhí)行

          (2)調用函數(shù):直接寫函數(shù)名稱,后面直接跟一個小括號,小括號中可以有“實參”

          函數(shù)語法格式:

          function functionName([形參1][,形參2][,形參3])

          {

          實現(xiàn)一個功能的程序代碼;

          [return 參數(shù)]

          }

          語法說明:

          函數(shù)名稱的命名同變量一樣;

          形式參數(shù):定義函數(shù)的參數(shù)就叫“形式參數(shù)”,該參數(shù)接受調用函數(shù)時傳遞過來的值

          形式參數(shù)的命名,同變量也一樣;

          形式參數(shù)不能是具體的值;比如:function getMax(10,20)是錯誤的

          函數(shù)定義了,就必須要調用;

          調用函數(shù)用時,直接寫函數(shù)名稱,后跟小括號,括號中是“實參”;

          實際參數(shù):調用函數(shù)時,傳遞的參數(shù)叫“實參”,就是“實際的數(shù)據(jù)”;

          形式參數(shù)和實際參數(shù)的個數(shù)和順序應保持一致;

          Return語句:可以調用函數(shù)者返回一個結果;

          Return語句執(zhí)行后,立即結束函數(shù)的運行;

          如果return語句后面,還有其它程序代碼,將不再執(zhí)行;

          因此,return語句放在函數(shù)的最后面;

          JS中是區(qū)分大小寫的,但關鍵字一律小寫;對象的方法:today.toLocaleString()

          全局變量和局部變量

          全局變量:可以在任何地方(函數(shù)內部和函數(shù)外部)使用的變量,就叫“全局變量”;

          一般來說,在函數(shù)外部定義的變量,是“全局變量”;

          省略關鍵字var定義的變量,也是“全局變量”,一般情況下不要省略;

          局部變量:只能在函數(shù)內部使用的變量,叫“局部變量”。

          注意:在JS中,在函數(shù)外部定義的變量,可以在函數(shù)內部使用;但在函數(shù)內部定義的變量,只能在函數(shù)內部使用。

          將函數(shù)定義作為數(shù)據(jù),賦給其它變量

          • 將函數(shù)定義,賦給一個基本數(shù)據(jù)類型的變量

          function showInfo()

          {

          return “我是一個函數(shù)”;

          document.write(“我是一個函數(shù)”);

          }

          var a=showInfo; //將函數(shù)定義(地址),賦給一個變量,變量a是復合數(shù)據(jù)類型

          document.write(a() );

          var b=showInfo(); //將函數(shù)的執(zhí)行結果,賦給一個變量b,變量b是基本數(shù)據(jù)類型

          注意的是:函數(shù)名showInfo后不能跟小括號;

          如果showInfo后面跟了小括號,就是調用函數(shù),將函數(shù)的執(zhí)行結果,賦給a變量,而不是地址

          • 將函數(shù)定義,賦給一個數(shù)組元素,那么,該數(shù)組元素就是一個函數(shù)了;

          Var arr=[10,20,30];

          arr[1]=showInfo(); //arr[1]的值是“我是一個函數(shù)”

          arr[2]=showInfo; //arr[2]就變成了函數(shù)

          document.write( arr[1] );

          document.write( arr[2]() ); //既然arr[2]是一個函數(shù),在調用時,一定要寫小括號

          3)將函數(shù)定義,賦給一個對象屬性,那么,該對象的屬性就是一個函數(shù)了;

          var obj={

          name:“張三”,

          age:30,

          show:showInfo //將函數(shù)定義,賦給了一對象屬性

          };

          obj.show(); //方法和函數(shù)的定義是一樣的,只是在不同的地方叫法不一樣

          document.write( obj.name );

          基本數(shù)據(jù)類型和復合數(shù)據(jù)類型

          基本數(shù)據(jù)類型:是將變量名稱和變量的值,都存入“快速內存”“棧內存”;

          將基本數(shù)據(jù)類型的變量,賦給其它變量,是將原來變量的值“復制”一份,放到了新變量中,因此,這兩個變量沒有任何關系,換句話說:修改其中一個變量的值,另一個變量的值不會改變;

          var a=10; //基本數(shù)據(jù)類型,在賦值是地,是傳值

          var b=a; //將a的值,復制一份,傳給b

          a=100; //給變量a重新賦值

          document.write(b); //求變量b的值,是否會改變

          引用數(shù)據(jù)類型(復合數(shù)據(jù)類型):它的存儲分兩個部分,一是把數(shù)據(jù)存到“慢內存”“堆內存”,二是將變量名稱和數(shù)據(jù)地址存到“快速內存”“棧內存”。

          換句話說:就是新變量和舊變量,同時指向了同一個數(shù)據(jù)地址,只是變量名稱不一樣。

          var arr1=[1,10,20,30];

          var arr1=new Array(1,10,20,30);

          var arr2=arr1; //將arr1賦給了arr2,其實,這里傳的數(shù)據(jù)地址,并不是具體的數(shù)據(jù)

          arr1[0]=100; //對arr1中的第1個元素,重新賦值

          document.write( arr2[0] );

          補充知識點:for in循環(huán)

          For ……in主要是循環(huán)或遍歷,數(shù)組元素對象的屬性

          注意:如果遍歷數(shù)組的話,未定義的數(shù)組元素,不會輸出;只會輸出有效數(shù)據(jù)。

          語法結構:

          for(index in arr)

          {

          document.write( arr[index] );

          }

          參數(shù)說明:

          arr代表一個數(shù)組;

          index代表一個數(shù)組元素的下標;

          舉例:

          var arr=[1,2,,,,,3,,,,,,,,,,,,,,,,,4];

          遍歷對象屬性

          for(name in window)

          {

          document.write( name );

          }

          參數(shù)說明:

          Name就是遍歷對象,返回的屬性名稱;

          Window是一個窗口,代表當前瀏覽器窗口,比如:document、 history、screen、 navigator等

          2.函數(shù)對象

          一個函數(shù)對應一個函數(shù)對象。

          arguments屬性:函數(shù)對象的一個數(shù)組對象屬性,包含了所有接收到的參數(shù)

          arguments.length:取得所有接收到的參數(shù)的個數(shù)

          arguments是在函數(shù)內部來使用;

          3.對象

          對象是一組屬性和方法的集合。

          JS中的對象分類:

          自定義對象:自己根據(jù)需要定義自己的對象;var obj={}

          JS內置對象:

          String:字符串對象,提供字符串操作的屬性和方法。比如:length

          Array:數(shù)組對象,提供數(shù)組操作的屬性和方法。比如:length

          Date:日期時間對象,提供訪問系統(tǒng)時間日期的信息。比如:getDay()、toLocaleString()

          Math:數(shù)學對象,提供數(shù)學處理的方法。比如:Math.floor()、Math.ceil()、Math.round()

          Number:數(shù)字對象。比如:toFixed()

          Function:函數(shù)對象。比如:arguments數(shù)組對象

          Event:事件對象。比如:onMouseOver、onMouseOut、onClick、onLoad

          正則對象:正則表達式,對數(shù)據(jù)進行更嚴格的驗證。(就業(yè)班講)

          BOM和DOM對象(核心)

          BOM提供了訪問和操作瀏覽器各組件的途徑;

          DOM提供了訪問和操作網頁中各HTML元素的途徑

          4.自定義對象

          對象就是一組屬性和方法的集合。

          一、創(chuàng)建自定義對象

          (1)使用new關鍵字和Object()來創(chuàng)建一個空對象,然后添加屬性和方法

          方法就是函數(shù),在對象中的函數(shù),就叫“方法”。

          Var obj=new Object();

          obj.name=“張三”; //增加一個屬性,并賦值

          obj.sex=“男”;

          obj.age=30;

          obj.isMarried=true;

          obj.school=null;

          obj.showInfo=function(){

          var str=this.name+“的基本資料”;

          str +=“<br>姓名:”+this.name;

          }

          onload:當網頁加載完成,去執(zhí)行JS程序代碼。

          當網頁的中所有HTML標記都加載完成后,才會觸發(fā)onLoad事件;

          觸發(fā)onLoad事件后,會去調用相應的JS程序。

          只要<body>中有一個HTML標記沒有顯示出來,onLoad就不會發(fā)生

          <body>……</body>……onload事件……調用JS函數(shù)——document.write

          2)使用{}來創(chuàng)建對象

          Var obj={

          name:“張三”,

          sex:true

          }

          5.JS的內置對象——String對象

          一個字符串的變量,就是一個String對象。

          一、創(chuàng)建String對象的方法

          1)使用new關鍵字和String()構造函數(shù)來創(chuàng)建(不常用)

          var strObj=new String(“Welcome”);

          var len=strObj.length; //獲得字符串的長度

          • 定義一個字符串變量,就對應一個String對象(最常用)

          var str=“重蔚自留地”;

          var len=str.length;

          二、String對象的屬性和方法

          length:獲得字符串的長度,var len=str.length

          注意:JS的length是指字符個數(shù),并不是按字節(jié)來計算。

          charAt(index):返回指定位置的一個字符。

          提示:String中的下標與Array中的下標一樣。

          index:表示指定位置的下標(索引號)

          舉例:

          var str=“Welcome”;

          var str1=str.charAt(str.length-1) //取得最后一個字符

          indexOf(substr[,startIndex])

          描述:從原字符串中,查找子字符串,如果找到,返回起點索引號;如果未找到,返回-1。

          參數(shù):

          substr:子字符串

          startIndex:開始查找的位置索引號。如果省略,則從0開始查找。

          lastIndexOf(substr[,startIndex])

          描述:在原字符串中,從右往左搜索子字符串,如果沒有找到,則返回-1。

          參數(shù):同indeOf()方法一樣

          substr(startIndex[,length])

          描述:返回一個子字符串。

          參數(shù):

          startIndex:開始索引號

          length:返回幾個字符。如果length省略,返回到結束的所有字符。

          舉例:

          var str=“welcome”;

          var str2=str.substr(3,2); // str2=co

          substring(startIndex[,endIndex])

          描述:返回索引號從startIndex到索引號endIndex之間的一個子字符串。

          參數(shù):

          startIndex:開始索引號

          endIndex:結束索引號,如果省略,返回到結尾的所有字符。

          split(separator)

          描述:將一個字符串,用指定分割符separator分成一個數(shù)組

          參數(shù):separator就是一個分割符

          舉例:

          Var str=“星期一,星期二,星期三”;

          Var arr=str.split(“,”);

          search(substr)

          描述:查找指定的子字符串,如果沒有找到,返回-1

          replace(substr,replacement)

          描述:在原始字符串中,將一個指定的子字符串,替換成指定的內容。

          參數(shù):

          Substr:要查找的內容

          Replacement:要替換的內容

          注意:如果不使用“正則表達式”,則只能替換一次。

          var new=str.replace(/X/g,”itcast”); //JS中的正則,是放在//中間的,不能加引號。g參數(shù)代表全部替換。

          toLowerCase()

          描述:轉成小寫

          舉例:str.toLowerCase()

          toUpperCase()

          描述:轉成大寫

          舉例:str.toUpperCase()

          localeCompare(str)

          描述:對字符串使用本地規(guī)則進行比較。我們使用的操作系統(tǒng)是中文操作系統(tǒng),中文操作系統(tǒng)默認的排序規(guī)則就按“拼音”先后來排序的。

          str1.localeCompare(str2)

          如果str1 > str2 則返回一個大于0的值

          如果str1=str2 則返回一個等于0的值

          如果str1<str2 則返回一個小于0的值

          onchange:當選擇內容發(fā)生改變時,去調用JS驗證函數(shù)。

          6.Array對象

          length:取得數(shù)組元素的個數(shù)

          shift():刪除第一個數(shù)組元素,數(shù)組的長度-1。

          pop():刪除最后一個數(shù)組元素,數(shù)組的長度-1

          unshift():在開頭添加一個數(shù)組元素,數(shù)組的長度+1

          push():在最后添加一個數(shù)組元素,數(shù)組的長度+1

          注意:delete刪除的是數(shù)組元素的內容,而shift()刪除的是內容和下標。

          join([separator)):將數(shù)組各個元素,用指定的連接符,連成一個字符串。與split()正好相反

          separator是可選項,如果省略,則用逗號連接。

          reverse():反轉數(shù)組中各個元素,顛倒順序。

          sort()

          描述:對數(shù)組中各個元素進行排序,默認是按字母的先后順序排列。

          格式:arr.sort([orderby])

          參數(shù):orderby是可選參數(shù),它指定排序的規(guī)則,一般是一個函數(shù)。

          (1)對數(shù)值進行排序

          orderby函數(shù)必須接收兩個參數(shù),比如a和b;

          orderby函數(shù)中使用return返回值;

          如果a-b>0,返回1

          如果a-b=0,返回0

          如果a-b<0,返回-1

          var arr=[1,2,10,12,3,31,15,19,25,39];

          arr.sort(orderby);

          function orderby(a,b)

          {

          return a-b;

          }

          document.write(arr);

          7.Date對象

          一、創(chuàng)建Date對象的實例

          (1)使用new關鍵字和Date()構造函數(shù)來創(chuàng)建

          Var today=new Date(); //注意:如果不帶參數(shù),則創(chuàng)建一個當前系統(tǒng)時間的實例

          (2)指定一個日期時間字符串參數(shù)

          Var yestoday=new Date(“1990/10/23 10:09:00”); //可以創(chuàng)建基于某一個時間的一對象實例

          二、Date對象的方法

          getFullYear():取出四位的年份

          getMonth():取出月份,取值0-11

          getDate():取出天數(shù)

          getHours():取出小時數(shù)

          getSeconds():取出秒數(shù)

          getMinutes():取出分鐘數(shù)

          getDay():取出星期值,取值:0-6

          getTime():取出距離1970年1月1日,0時0分0秒的毫秒數(shù)

          toLocaleString():轉成字符串


          主站蜘蛛池模板: 国产免费私拍一区二区三区| 嫩B人妻精品一区二区三区| 日韩福利视频一区| 国产激情一区二区三区成人91| 久久se精品一区二区| 日本一区二区三区日本免费| 亚洲综合一区二区国产精品| 国产伦精品一区二区免费| 国产精品盗摄一区二区在线| 国产高清视频一区三区| 亚洲人AV永久一区二区三区久久| 亚洲一区二区三区91| 曰韩精品无码一区二区三区| 亚洲蜜芽在线精品一区| 国产裸体舞一区二区三区| 久久精品无码一区二区app| 日本无卡码一区二区三区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 国产品无码一区二区三区在线蜜桃| 亚洲一区精彩视频| 日韩av无码一区二区三区| 中文字幕一区二区三区在线播放 | 国产av天堂一区二区三区| 香蕉久久一区二区不卡无毒影院| 乱人伦一区二区三区| 无码一区二区三区亚洲人妻| 无码毛片一区二区三区视频免费播放 | 亚洲AV成人一区二区三区观看| 亚洲A∨无码一区二区三区| 久久国产视频一区| 亚洲欧美一区二区三区日产 | 久久精品一区二区三区日韩| 中文字幕无码免费久久9一区9| 国产成人精品一区二区三区无码| 久久青草精品一区二区三区| 91无码人妻精品一区二区三区L| 无码人妻一区二区三区免费手机| 精品视频一区二区三区四区 | 精品无码av一区二区三区| 日韩免费无码一区二区三区| 国产成人精品久久一区二区三区|