一些容易錯的JS知識

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(&quot;obj&quot;); 
//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 是相等的,且等于自身
    1. 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,569評論 0 13
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • “我們要找畢書記,我們農(nóng)村人嘴笨,也不會說太多漂亮話,就是想過來親口跟你們說聲謝謝”。2月12日,石橋鎮(zhèn)政府辦...
    石橋人閱讀 671評論 0 1
  • 這幾天的春冷,收起來的羽絨服又翻出來穿上身了!室外呼呼的風(fēng),叫來的外賣都是冷的~把寶寶的好胃口都抹殺了~ 這天氣吃...
    孫苗苗sunny閱讀 539評論 0 0

友情鏈接更多精彩內(nèi)容