摘要:題目使用能得到哪些類型和的選擇中有哪些內置函數變量按存儲方式分為哪些類型,并描述其特點如何理解知識點值類型和引用類型值類型引用類型對象,數組,函數值類型直接把值存儲在堆中,把賦值給在內存中是又給開辟了一塊新的空間,存儲了同樣的值。
1.題目
1.JS使用typeof能得到哪些類型
=== 和 == 的選擇
JS中有哪些內置函數
JS變量按存儲方式分為哪些類型,并描述其特點
如何理解JSON
2.知識點 2.1 值類型和引用類型值類型(boolean,string,number,null,undefined)
var a = 10; var b = a; a = 20; console.log(b); //10
引用類型(對象,數組,函數)
var a = {x:10} var b = a; a.x = 20; console.log(b); //20
值類型直接把值存儲在堆中,把a賦值給b在內存中是又給b開辟了一塊新的空間,存儲了同樣的值。
引用類型分兩塊存儲,先在堆中存儲一個實際的值,再在棧中存儲一個堆中值的引用地址,指向堆中的對象。把a賦值給b是在棧中重新開辟一塊空間存儲的還是相同對象的引用地址,a和b存儲的地址相同,指向的對象也相同。當對象值發生改變時,兩者會同時改變。
引用類型的值一般都比較大,采用此種存儲方式可以節省內存空間。
2.2 typeof運算符typeof "abc" //string typeof 123 //number typeof true //boolean typeof undefined //undefined typeof null //object typeof {a:10} //object typeof [1,2,3] //object typeof console.log() //function2.3 類型轉換
強類型轉換:通過String(),Number(),Boolean(),parseInt()函數強制轉換
可能發生隱式類型轉換的場景
字符串拼接
使用==
if語句
邏輯循環
一、首先看雙等號前后有沒有NaN,如果存在NaN,一律返回false。
二、再看雙等號前后有沒有布爾,有布爾就將布爾轉換為數字。(false是0,true是1)
三、接著看雙等號前后有沒有字符串, 有三種情況:
1、對方是對象,對象使用toString()或者valueOf()進行轉換;
2、對方是數字,字符串轉數字;(前面已經舉例)
3、對方是字符串,直接比較;
4、其他返回false
四、如果是數字,對方是對象,對象取valueOf()或者toString()進行比較, 其他一律返回false
五、null, undefined不會進行類型轉換, 但它們倆相等
上面的轉換順序一定要牢記,面試的時候,經常會出現類型的問題。
"100"==100 //轉換成字符串 ""==0 //轉換成false undefined == null; // true 1 == true; // true 2 == true; // false 0 == false; // true 0 == " "; // true NaN == NaN; // false [] == false; // true [] == ![]; // true
//在if中轉換成false的: null undefined "" NaN 0 false
10 && 0 //0 10轉換成true "" || "abc" //abc ""轉換成false !window.abc //true2.4 null和undefined的區別
null:是被賦值過的對象,刻意把一個對象賦值為null,故意表示其為空,不應有值,所以對象為null是正常的,typeof null 返回 "object" ,null可以轉換為0
undefined 表示“缺少值”,即此處應有一個值,但還沒有定義;轉為數值時為NaN(非數字值的特殊值) typeof undefined 返回 "undefined"
3.題目解答 3.1 JS使用typeof能得到哪些類型typeof "abc" //string typeof 123 //number typeof true //boolean typeof undefined //undefined typeof null //object typeof {a:10} //object typeof [1,2,3] //object typeof console.log() //function3.2 === 和 == 的選擇
jquery源碼中的寫法:
除了以下方式其他全部使用 ===
if(obj.a == null){ //相當于 obj.a === undefined || obj.a === null }3.3 JS中有哪些內置函數
單純作為語言來說,不考慮node和瀏覽器web
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
內置對象:Math,JSON
3.4 JS變量按存儲方式分為哪些類型,并描述其特點值類型何引用類型
3.5 如何理解JSONJSON是JS中的一個內置對象
區別
JS對象 {x:10}
JSON對象 {"x":10}
JSON串 "{"x":10}"
//將JS對象轉換成json串 JSON.stringify({x:10}); //將json字符串轉換成json對象 JSON.parse("{"x":10}");3.6 嚴格模式
目的
消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為;
消除代碼運行的一些不安全之處,保證代碼運行的安全;
提高編譯器效率,增加運行速度;
為未來新版本的Javascript做好鋪墊。
特性
"use strict";
可以選擇放在一個函數中或自定義作用域中。
禁止this指向全局對象
function f(){ return !this; } // 返回false,因為"this"指向全局對象,"!this"就是false function f(){ "use strict"; return !this; } // 返回true,因為嚴格模式下,this的值為undefined,所以"!this"為true。
創設eval作用域
正常模式下,Javascript語言有兩種變量作用域(scope):全局作用域和函數作用域。嚴格模式創設了第三種作用域:eval作用域。
正常模式下,eval語句的作用域,取決于它處于全局作用域,還是處于函數作用域。嚴格模式下,eval語句本身就是一個作用域,不再能夠生成全局變量了,它所生成的變量只能用于eval內部。
"use strict"; var x = 2; console.info(eval("var x = 5; x")); // 5 console.info(x); // 2
全局變量顯式聲明
v = 1; // 報錯,v未聲明 for(i = 0; i < 2; i++) { // 報錯,i未聲明 }
禁止刪除變量
嚴格模式下無法刪除變量。只有configurable設置為true的對象屬性,才能被刪除。
"use strict"; var x; delete x; // 語法錯誤 var o = Object.create(null, {"x": { value: 1, configurable: true }}); delete o.x; // 刪除成功
函數不能有重名的參數
保留字
為了向將來Javascript的新版本過渡,嚴格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
使用這些詞作為變量名將會報錯。
function package(protected) { // 語法錯誤 "use strict"; var implements; // 語法錯誤 }3.7 eval
1.沒有必須使用的應用場景
2.不容易調試,可讀性不好
3.在舊的瀏覽器中如果你使用了eval,性能會下降10倍。
4.容易xss
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100658.html
摘要:在標簽中添加屬性,本質上是跟在標簽里面寫屬性時一樣的,所以屬性值最終都會編譯為字符串類型。這個節點包括很多,比如,以及一些方法等方法。一個對象有很多,該集合名字為,里面有其他以及,里面有很多。 一、變量類型和計算 JS中使用typeof能得到哪些類型 變量類型 值類型:變量本身就是含有賦予給它的數值的,它的變量本身及保存的數據都存儲在棧的內存塊當中 引用類型:引用類型當然是分配到...
摘要:進階期理解中的執行上下文和執行棧進階期深入之執行上下文棧和變量對象但是今天補充一個知識點某些情況下,調用堆棧中函數調用的數量超出了調用堆棧的實際大小,瀏覽器會拋出一個錯誤終止運行。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周正式開始前端進階的第一期,本周的主題是調用堆棧,今天是第3天。 本計劃一共28期,每期重點攻...
摘要:的變量提升的底層原理是什么引擎的工作方式是先解析代碼,獲取所有被聲明的變量然后在運行。引用計數這種方式常常會引起內存泄漏,低版本的使用這種方式。1. var的變量提升的底層原理是什么? JS引擎的工作方式是: 1) 先解析代碼,獲取所有被聲明的變量; 2)然后在運行。也就是說分為預處理和執行兩個階段。 變量提升:所有變量的聲明語句都會被提升到代碼頭部。 但是變量提升只對var命令聲明的變...
摘要:是什么是異步編程的一種解決方案所謂,簡單說就是一個容器,里面保存著某個未來才會結束的事件通常是一個異步操作的結果。 最近也在準備換工作了,然后收集了一些我覺得今年面試會遇到常見的問題。 如果有機會,記得也幫忙分享我一下。2019的行情確實很糟糕。看到這么多人收藏點贊。我的內心也是哇涼哇涼的。我也給一些除了面試題之外的經驗吧 我相信不景氣也是相對的,提升自我也是必要的。我說說我最近在準...
摘要:是什么是異步編程的一種解決方案所謂,簡單說就是一個容器,里面保存著某個未來才會結束的事件通常是一個異步操作的結果。 最近也在準備換工作了,然后收集了一些我覺得今年面試會遇到常見的問題。 如果有機會,記得也幫忙分享我一下。2019的行情確實很糟糕。看到這么多人收藏點贊。我的內心也是哇涼哇涼的。我也給一些除了面試題之外的經驗吧 我相信不景氣也是相對的,提升自我也是必要的。我說說我最近在準...
閱讀 3793·2021-09-29 09:34
閱讀 3770·2021-09-27 13:34
閱讀 565·2021-09-24 09:47
閱讀 3036·2019-08-30 15:53
閱讀 1808·2019-08-26 13:54
閱讀 2085·2019-08-26 13:43
閱讀 531·2019-08-23 14:47
閱讀 1740·2019-08-23 14:28