摘要:函數(shù)聲明函數(shù)表達(dá)式表達(dá)式定義的函數(shù),成為匿名函數(shù)。匿名函數(shù)沒有函數(shù)提升。一種數(shù)據(jù)類型,它的實(shí)例是唯一且不可改變的。和是本語言的其他兩個基本要素??傊?,這些也帶來了對象字面值和類聲明緊密聯(lián)系起來,讓基于對象的設(shè)計得益于一些同樣的便利。
聲明(Declarations)
undefined值在布爾類型環(huán)境中會被當(dāng)作false。
數(shù)值類型環(huán)境中undefined值會被轉(zhuǎn)換為NaN。
對一個空變量求值時,空值 null 在數(shù)值類型環(huán)境中會被當(dāng)作0來對待,而布爾類型環(huán)境中會被當(dāng)作false
JavaScript 變量感覺上是被“提升”或移到了所有函數(shù)和語句之前。提升后的變量將返回 undefined 值,所以即使在使用或引用某個變量之后存在聲明和初始化操作,這個被提升的引用仍將得到 undefined 值。
由于存在變量聲明提升,一個函數(shù)中所有的var語句應(yīng)盡可能地放在接近函數(shù)頂部的地方。這大大地提升了程序代碼的清晰度。
(在 ECMAScript 2015 中,let(const)將不會提升變量到代碼塊的頂部。因此,在變量聲明之前引用這個變量,將拋出錯誤ReferenceError。這個變量將從代碼塊一開始就處在一個“暫時性死區(qū)”,直到這個變量被聲明為止。)
對于函數(shù),只有函數(shù)聲明會被提升到頂部,不包括函數(shù)表達(dá)式。
/* 函數(shù)聲明 */ foo(); // "bar" function foo() { console.log("bar"); } /* 函數(shù)表達(dá)式 表達(dá)式定義的函數(shù),成為匿名函數(shù)。匿名函數(shù)沒有函數(shù)提升。*/ baz(); // TypeError: baz is not a function //此時的"baz"相當(dāng)于一個聲明的變量,類型為undefined。 由于baz只是相當(dāng)于一個變量,因此瀏覽器認(rèn)為"baz()"不是一個函數(shù)。 var baz = function() { console.log("bar2"); };
全局對象是 window,你可以通過指定 window 或 frame 的名字,從一個 window 或 frame 訪問另一個 window 或 frame 中聲明的變量。例如,設(shè)想一個叫 phoneNumber 的變量在文檔里被聲明,你可以在子框架里用 parent.phoneNumber 來引用它。
常量(Constants)在同一作用域中,不能用與變量或函數(shù)同樣的名字來命名常量。然而,對象屬性是不受保護(hù)的,所以下面的語句執(zhí)行沒有問題。
const MY_OBJECT = {"key": "value"}; MY_OBJECT.key = "otherValue";數(shù)據(jù)結(jié)構(gòu)和類型
六種是 原型 的數(shù)據(jù)類型 以及 Object 對象
Boolean. 布爾值,true 和 false.
一個表明 null 值的特殊關(guān)鍵字。 JavaScript 是大小寫敏感的,因此 null 與 Null、NULL或其他變量完全不同。
變量未定義時的屬性。
Number. 表示數(shù)字,例如: 42 或者 3.14159。
String. 表示字符串,例如:"Howdy"
Symbol ( 在 ECMAScript 6 中新添加的類型).。一種數(shù)據(jù)類型,它的實(shí)例是唯一且不可改變的。
Objects 和 functions 是本語言的其他兩個基本要素。你可以將對象視為存放值的命名容器,而將函數(shù)視為你的應(yīng)用程序能夠執(zhí)行的過程(procedures)。
在涉及加法運(yùn)算符(+)的數(shù)字和字符串表達(dá)式中,JavaScript 會把數(shù)字值轉(zhuǎn)換為字符串。
x = "The answer is " + 42 // "The answer is 42" y = 42 + " is the answer" // "42 is the answer"
在涉及其它運(yùn)算符(譯注:如下面的減號"-")時,JavaScript語言不會把數(shù)字變?yōu)樽址?。例如(譯注:第一例是數(shù)學(xué)運(yùn)算,第二例是字符串運(yùn)算):
"37" - 7 // 30 "37" + 7 // "377"字符串轉(zhuǎn)換為數(shù)字(converting strings to numbers)
parseInt()和parseFloat()
將字符串轉(zhuǎn)換為數(shù)字的另一種方法是使用單目加法運(yùn)算符。
"1.1" + "1.1" = "1.11.1" (+"1.1") + (+"1.1") = 2.2 // 注:加入括號為清楚起見,不是必需的。
對象屬性名字可以是任意字符串,包括空串。如果對象屬性名字不是合法的javascript標(biāo)識符,它必須用""包裹。屬性的名字不合法,那么便不能用.訪問屬性值,而是通過類數(shù)組標(biāo)記("[]")訪問和賦值。
var unusualPropertyNames = { "": "An empty string", "!": "Bang!" } console.log(unusualPropertyNames.""); // 語法錯誤: Unexpected string console.log(unusualPropertyNames[""]); // An empty string console.log(unusualPropertyNames.!); // 語法錯誤: Unexpected token ! console.log(unusualPropertyNames["!"]); // Bang!
注意:
var foo = {a: "alpha", 2: "two"}; console.log(foo.a); // alpha console.log(foo[2]); // two //console.log(foo.2); // Error: missing ) after argument list //console.log(foo[a]); // Error: a is not defined console.log(foo["a"]); // alpha console.log(foo["2"]); // two
在ES2015,對象字面值擴(kuò)展支持在創(chuàng)建時設(shè)置原型,簡寫foo:foo分配,定義方法,加工父函數(shù)(super calls),計算屬性名(動態(tài))。總之,這些也帶來了對象字面值和類聲明緊密聯(lián)系起來,讓基于對象的設(shè)計得益于一些同樣的便利。
var obj = { // __proto__ __proto__: theProtoObj, // Shorthand for ‘handler: handler’ handler, // Methods toString() { // Super calls return "d " + super.toString(); }, // Computed (dynamic) property names [ "prop_" + (() => 42)() ]: 42 };
能在JavaScript的字符串中使用的···特殊字符···
轉(zhuǎn)義字符
// 引號轉(zhuǎn)義 var quote = "He read "The Cremation of Sam McGee" by R.W. Service."; // 轉(zhuǎn)義反斜線 var home = "c: emp"; // 轉(zhuǎn)義換行 一條語句拆成多行書寫 var str = "this string is broken across multiple lines." console.log(str); // this string is broken across multiplelines. // Javascript沒有“heredoc”語法,但可以用行末的換行符轉(zhuǎn)義和轉(zhuǎn)義的換行來近似實(shí)現(xiàn) var poem = "Roses are red, Violets are blue. I"m schizophrenic, And so am I."
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/87928.html
摘要:下面這些值將被計算出空字符串當(dāng)傳遞給條件語句時,所有其他值,包括所有對象會被計算為。如果表達(dá)式的值為,將執(zhí)行循環(huán)語句若為,循環(huán)終止。如果要執(zhí)行多條語句,就要用中括號把語句括起來。若存在則執(zhí)行,然后會回到第步執(zhí)行語句。 下面這些值將被計算出 false (also known as Falsy values): false undefined null 0 NaN 空字符串 () 當(dāng)...
摘要:很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針比如中的指針,中的,也有指針,雖然它的指向可能相對復(fù)雜些,但是指向的,永遠(yuǎn)只可能是對象。 很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針,比如JAVA、C++中的this指針,python中的self,JavaScript也有this指針,雖然它的指向可能相對復(fù)雜些,但是this指向的,永遠(yuǎn)只可能是對象。 一、在一般函數(shù)方法...
摘要:很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針比如中的指針,中的,也有指針,雖然它的指向可能相對復(fù)雜些,但是指向的,永遠(yuǎn)只可能是對象。 很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針,比如JAVA、C++中的this指針,python中的self,JavaScript也有this指針,雖然它的指向可能相對復(fù)雜些,但是this指向的,永遠(yuǎn)只可能是對象。 一、在一般函數(shù)方法...
閱讀 1910·2021-11-25 09:43
閱讀 1558·2021-09-02 15:21
閱讀 3524·2019-08-30 15:52
閱讀 1559·2019-08-30 12:48
閱讀 1374·2019-08-30 10:57
閱讀 2991·2019-08-26 17:41
閱讀 743·2019-08-26 11:59
閱讀 1427·2019-08-26 10:41