void();
上面表達(dá)式的結(jié)果是:
void 0; //undefined
void (0);//undefined
void (); //SyntaxError 語法錯誤
NOSCRIPT標(biāo)簽
用來定義在腳本未被執(zhí)行時的替代內(nèi)容。也可以用在檢測瀏覽器是否支持腳本,若不支持腳本則可以顯示NOSCRIPT標(biāo)簽里的innerText
noscript:用以在不支持js的瀏覽器中顯示替代的內(nèi)容,這個元素可以包含能夠出現(xiàn)在文檔<body>中任何html元素,script元素除外。包含在noscript元素的內(nèi)容只有在下列情況下才會顯示出來
- 1.瀏覽器不支持腳本
- 2.瀏覽器支持腳本,但腳本被禁用
options
window.onload = function(){
//首先獲得下拉框的節(jié)點對象;
var obj =
document.getElementById("obj");
//1.如何獲得當(dāng)前選中的值?:
var value = obj.value;
//2.如何獲得該下拉框所有的option的節(jié)點對象
var options = obj.options;
//注意:得到的options是一個對象數(shù)組
//3.如何獲得第幾個option的value值?比如我要獲取第一option的value,可以這樣:
var value1 =options[0].value;
//4.如何獲得第幾個option的文本內(nèi)容?比如我要獲取第一option的文本,可以這樣:
var text1 = options[0].text;
//5.如何獲得當(dāng)前選中的option的索引?
var index = obj.selectedIndex;
//6.如何獲得當(dāng)前選中的option的文本內(nèi)容?
//從第2個問題,我們已經(jīng)獲得所有的option的對象數(shù)組options了
//又從第5個問題,我們獲取到了當(dāng)前選中的option的索引值
//所以我們只要同options[index]下標(biāo)的方法得到當(dāng)前選中的option了
var selectedText =options[index].text; }
+new Array(017) 輸出?( )
+new Array(017) 等價于 + new Array(15) (15的八進(jìn)制是17)
按照規(guī)則,數(shù)組對象應(yīng)該采用Number,所以先執(zhí)行valueOf,發(fā)現(xiàn)valueOf返回的是自己,所以繼續(xù)執(zhí)行toString,過程如下:
Number(new Array(15))
// new Array(15).valueOf()不是原始值,所以執(zhí)行toString()
Number(new Array(15).toString())
Number(",,,,,,,,,,,,,,")
NaN
所以答案是NaN
引用類型
var a=[1], b=a;
a=[];
console.log(b)
// [1]
var a=[1], b=a;
a.length=0;
console.log(a)
// []
單例模式
是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案。
單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創(chuàng)建這個實例;三是它必須自行向整個系統(tǒng)提供這個實例。
angularjs的服務(wù)是一個單例對象或函數(shù),對外提供特定的功能。
JavaScript RegExp 對象
有 3 個方法:test()、exec() 和 compile()。
- (1) test() 方法用來檢測一個字符串是否匹配某個正則表達(dá)式,如果匹配成功,返回 true ,否則返回 false;
- (2) exec() 方法用來檢索字符串中與正則表達(dá)式匹配的值。exec() 方法返回一個數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配的值,則返回 null;
- (3) compile() 方法可以在腳本執(zhí)行過程中編譯正則表達(dá)式,也可以改變已有表達(dá)式。
JavaScript中運算符優(yōu)先級
https://www.cnblogs.com/thinkguo/p/7446880.html
括號 new 邏輯運算 乘除,加減,大小余,等于,賦值,展開
()括號
new(..) 帶參數(shù)的new
...(..) 函數(shù)調(diào)用
++ 、-- 后置疊加/減
!,~,+,-,++ ,--,typeof,void,delete 邏輯非,按位非,前置疊加,一元運算符
^ 冪運算
*,/ ,% 乘除取余
+,- 加減
按位移動
<,<=,>,>=, in , instanceof 大于小于
== , !=, === , !== 等于
按位邏輯運算
賦值
展開運算
逗號
在 JS 里,聲明函數(shù)只有 2 種方法:
// 輸出
var f = function g() {
return 23;
};
typeof g(); // Error;
第 1 種: function foo(){...} (函數(shù)聲明)
第 2 種: var foo = function(){...} (等號后面必須是匿名函數(shù),這句實質(zhì)是函數(shù)表達(dá)式)
除此之外,類似于 var foo = function bar(){...} 這樣的東西統(tǒng)一按 2 方法處理,即在函數(shù)外部無法通過 bar 訪問到函數(shù),因為這已經(jīng)變成了一個表達(dá)式。
但為什么不是 "undefined"?
這里如果求 typeof g ,會返回 undefined,但求的是 g(),所以會去先去調(diào)用函數(shù) g,這里就會直接拋出異常,所以是 Error。
原型鏈
var F=function(){};
Object.prototype.a=function(){};
Function.prototype .b=function(){};
var f=new F();
console.log(f.a,f.b,F.a,F.b)
// ? (){} undefined ? (){} ? (){}
f.__proto__ === F.prototype
// true
F.prototype.__proto__===Object.prototype
// true
f.__proto__.__proto__ === Object.prototype
// true
F.__proto__===Function.prototype
// true
類型轉(zhuǎn)換
三元運算符先“分清是非”,再決定今后該走哪條路,“==”運算符比較“喜歡”Number類型。(我就不嚴(yán)謹(jǐn)?shù)剡@么一說,若要刨根問底,請看《JavaScript權(quán)威指南》)
console.log(([])?true:false); // Boolean([]) true
console.log(([]==false?true:false)); // true
console.log(({}==false)?true:false) // false
下面是題目的類型轉(zhuǎn)換結(jié)果:
Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0
因此:
console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);
總結(jié)來說
- 1.false 、 0、 '' 、 [] 是相等的
- 2.null、undefined 是相等的,且等于自身
- NaN、{} 和什么的都不相等,自己跟自己都不相等
NaN == NaN //false
NaN == undefined //false
NaN == false //false
NaN == null //false
NaN==[] //false
NaN=='' //false
NaN=={} //false
false == false //true
false == undefined //false
false == null //false
false == [] //true
false == {} //false
false == '' //true
undefined == undefined //true
undefined == null //true
undefined == false //false
undefined == [] //false
undefined == {} //false
undefined == '' //false
null == null //true
null == NaN //false
null == [] //false
null == {} //false
null == undefined //true
0==false //true
0 == [] //true
0 == {} //false
0 == null //false
0 == undefined //false
0 == '' //true
0 == NaN //false
false == [] //true
false == {} //false
false == null //false
false == undefined //false
false == '' //true
false == NaN //false
[]=={} //false
Boolean([]) //true
Boolean({}) //true
Boolean(null) //false
Boolean(NaN) //false
Boolean(undefined) //false
Boolean('') //false
Boolean(0) //false
Number(undefined) //NaN
Number({}) //NaN
Number(NaN) //NaN
Number('') //0
Number([]) //0
Number(false) //0
Number(null) //0