目錄
7種資料型別
判斷資料型別(方法,優劣)
6種宣告變數的方法
var:變數提升,沒有區塊級作用域
const: 常數,位址不變,但是屬性可以變
let: 區塊作用域,暫時性死區( TDZ),不進行變數提升,不允許重複宣告
import:es6模組化解決方案
class:es6繼承解決方案
類型轉換
1.自動包裝
2.強行轉換為數字
3.-轉換
4. 轉換
5.布尔值Boolean
6.==和===
首頁 web前端 js教程 JavaScript基礎資料的梳理

JavaScript基礎資料的梳理

Feb 28, 2019 pm 01:16 PM
javascript 前端 面試

這篇文章帶給大家的內容是關於JavaScript基礎資料的梳理,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

看了一些資料,結合ES6、高程和MDN,對JS核心知識點進行了梳理。由於篇幅有限,這裡只對我認為重要的知識做了介紹。一些常識性的東西可以參考高程,另外一些核心知識點的擴展可以參考我其他的文章。本文適合作JS知識點複習/突擊用,亦可作為前端面試指導。

7種資料型別

基礎資料型別:儲存到堆疊記憶體中,操作的是值

null:空指針,所以typeof null ==>Object

undefined:定義了未賦值

Number:數字

#String:字串

Symbol:一種實例是唯一且不可改變的資料類型。

Boolean:布林值

引用資料型態:儲存在堆內存種,操作的是空間位址

Object:具體可以是Array,Function,RegExp,Date

判斷資料型別(方法,優劣)

typeof:只能判斷基礎型別中的非Null,不能判斷引用資料型別(因為全部為object)它是運算子

typeof ''  // ==> string
typeof 1  //==> number
typeof true  //==>boolean
typeof undefined  //==>undefined
let b = Symbol() ; typeof b //==>symbol
-----------------下面的判断不了实际类型了-----------------------
typeof function fn(){} //==>function
typeof null //==>object
typeof [1,2,3] //==>object
typeof {} //==>object
登入後複製

instanceof:用於測試建構子的prototype屬性是否出現在物件的原型鏈中的任何位置,可以用它來判斷Array但是不夠優雅且有一定風險

let arr = [1,2,3]
arr instanceof Array //==>true
arr instanceof Object //==>true
登入後複製
instanceof運算子的問題在於,它只有一個全域執行環境,如果網頁有多個框架,那實際上就存在兩個以上的不同的全域執行環境,從而存在兩個以上不同版本的Array建構子。如果從一個框架想另外一個框架傳入一個數組,那麼傳入的數組與在第二個框架中原生創建的數組分別具備各自不同的構造函數----高程page88 (筆者白話問翻譯一下:風險來至原型鏈的重寫

constructor:原理也是基於原型鏈,風險同樣來之於原型鏈的重寫,例如當你在多個frame中來回穿梭的時候,這兩種方法就亞歷山大了。由於每個iframe都有一套自己的執行環境,跨frame實例化的物件彼此是不共享原型鏈的,因此導致上述檢測程式碼失效!

isNaN:這個方法會先呼叫Number ,所以不是很好用

   console.log(isNaN("1px"));   //先调用Number('1px'),返回NaN,然后再调用isNaN(NaN)返回true
   //燃鹅 '1px'客观并不是NaN
登入後複製
    [1,2,3,1].constructor === Array; // true
登入後複製

---------------------------------- -------------比較好的方法--------------------------------

Object.prototype.toString.call()

    Object.prototype.toString.call(null) // ==> [object Null]
    Object.prototype.toString.call([]) // ==> [object Array]
登入後複製

----------------------------- --------------------優雅的方法---------------------

#如果需要單獨判斷Array

Array.isArray([]) //==>true
登入後複製

如果需要單獨判斷null

let a = null
Object.is(a , null) //==>true
登入後複製

6種宣告變數的方法

ES5 只有兩種宣告變數的方法:var指令與function指令。 ES6 除了加入let和const指令,後面章節還會提到,另外兩種宣告變數的方法:import指令和class指令。所以,ES6 一共有 6 種宣告變數的方法。 --es6

var:變數提升,沒有區塊級作用域

說到var肯定要提變數提升:目前作用域,js(函數)執行前,瀏覽器會把帶var或function進行提前宣告和定義

  1. 變數只聲明,函數是宣告賦值,自執行函數定義和執行一起完成了

  2. 不受邏輯判斷條件影響

  3. return 下面的也提升,但是return 裡面的不提升

  4. 重複的宣告可以,重新賦值即可,但是變數和方法名字不能衝突

const: 常數,位址不變,但是屬性可以變

let: 區塊作用域,暫時性死區( TDZ),不進行變數提升,不允許重複宣告

//只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。所以下面代码不报错,外层作用域和里层作用域都有一个tmp
let tmp = 123;
    if (true) {
      let tmp =123;    
    }
//ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
    let tmp = 123;
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;    
    }
登入後複製

import:es6模組化解決方案

class:es6繼承解決方案

類型轉換

這一塊內容太多,太雜了,其實我不怎麼想寫,因為很少人會這麼寫程式碼。但這塊太重要了,面試必考。建議大家掌握這塊的核心內容以及原則,不要關注奇淫巧技。

1.自動包裝

三種包裝類型:Number,Boolean,String

let s1 = '123'
let s2 = s1.slice(2)         // a是基本类型,它是没有slice方法的这里实际上后台完成了一个自动装包
---下面是实际发生的事---------
let s1 = new string('123')
let s2 = s1.slice(2)     
s1 = null      //注意这里用完就销毁了

//所以如果添加某个属性后面是调用不出来的
let s1 = '123'
s1.color = 'red'
console.log(s1.color) // ==> undefind
登入後複製

這些類型(建構子)基本上都重寫了它們的tostring方法

2.強行轉換為數字

  • #Number: 將其他資料型別的值強制轉換成number型別;

#
    console.log(Number({}));//NaN
    console.log(Number(null));// 0
    console.log(Number(undefined));// NaN
    console.log(Number([]));// 0
    console.log(Number(""));// 0
    console.log(Number(true));// 1
    console.log(Number(false));
登入後複製
  • parseInt :經常用於字串提取數字的方法; 把字串中從左到右依次識別,直到遇到一個非有效數字,停止,把找到的數字返回;

  console.log(parseInt("12px12"));// 12
  console.log(parseInt("12.666.777px12"));// 12
  console.log(parseInt("px12.666px12"));// NaN
  console.log(parseInt(""));// NaN
  console.log(parseInt(true));// NaN
  console.log(parseInt({}));// NaN
  console.log(parseInt([]));// NaN
  console.log(parseInt(null));// NaN
  console.log(parseInt(undefined));// NaN
登入後複製
  • toFixed : 保留小數點位數的方法,傳回值是一個字串;

#
    console.log(Number("1px"));   //==> NAN
    console.log(parseInt("1px"));   //==> 1
    console.log(parseInt("p1px"));   //==> NaN
登入後複製

3.-轉換

會先把字串轉換成數字(Number),然後再進行計算,注意NaN,undifined參與的任何計算都是NaN

  console.log("6" - 2);//==> 4
  console.log("5px"-"4")//==> NaN (NaN-4还是NaN)
登入後複製

4. 轉換

#具體呼叫string還是number請看下表

            || undefined | null   | boolean | number | string | object |
=========================================================================
 undefined  || number    | number | number  | number | string | string | 
 null       || number    | number | number  | number | string | string | 
 boolean    || number    | number | number  | number | string | string | 
 number     || number    | number | number  | number | string | string | 
 string     || string    | string | string  | string | string | string | 
 object     || string    | string | string  | string | string | string |
登入後複製
    //字符串和任何类型相加都是调用String
    var  a = typeof 10 + true + [] + null + undefined+{};
    console.log(a); //==>numbertruenullundefined[object Object],{}
    console.log("6px"+undefined); ==> 6pxundefined
    console.log(NaN+"undefined");==> NaNundefined
    //经典面试题
    [1,2]+[2,1]  //==>都调用toString '1,2'+'2,1'===>'1,22,1'
登入後複製

5.布尔值Boolean

其他数据类型转布尔类型是false有且只有五个值: 0  ""  NaN null  undefined  
所以boolean({}) 或者boolean([]) 都是真

6.==和===

===是全等,==是类型转化后再判断,规则比较复杂。这里我认为除了准备面试需要看看,平时基本不会用,所以这个知识性价比非常低,学了用不到也会忘,大家自己把握,详细规则可以搜我其他文章
平时除了判断a是否是undefined或者是null(jq源码里面都用法)都时候其他情况下都用===

console.log(null==undefined) // true
console.log(undefined==undefined) // true
登入後複製


以上是JavaScript基礎資料的梳理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP與Vue:完美搭檔的前端開發利器 PHP與Vue:完美搭檔的前端開發利器 Mar 16, 2024 pm 12:09 PM

PHP與Vue:完美搭檔的前端開發利器在當今網路快速發展的時代,前端開發變得愈發重要。隨著使用者對網站和應用的體驗要求越來越高,前端開發人員需要使用更有效率和靈活的工具來創建響應式和互動式的介面。 PHP和Vue.js作為前端開發領域的兩個重要技術,搭配起來可以稱得上是完美的利器。本文將探討PHP和Vue的結合,以及詳細的程式碼範例,幫助讀者更好地理解和應用這兩

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

Django是前端還是後端?一探究竟! Django是前端還是後端?一探究竟! Jan 19, 2024 am 08:37 AM

Django是一個由Python編寫的web應用框架,它強調快速開發和乾淨方法。儘管Django是web框架,但要回答Django是前端還是後端這個問題,需要深入理解前後端的概念。前端是指使用者直接和互動的介面,後端是指伺服器端的程序,他們透過HTTP協定進行資料的互動。在前端和後端分離的情況下,前後端程式可以獨立開發,分別實現業務邏輯和互動效果,資料的交

前端面試官常問的問題 前端面試官常問的問題 Mar 19, 2024 pm 02:24 PM

在前端開發面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎、JavaScript基礎、框架和函式庫、專案經驗、演算法和資料結構、效能最佳化、跨域請求、前端工程化、設計模式以及新技術和趨勢。面試官的問題旨在評估候選人的技術技能、專案經驗以及對行業趨勢的理解。因此,應試者應充分準備這些方面,以展現自己的能力和專業知識。

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

Django:前端和後端開發都能搞定的神奇框架! Django:前端和後端開發都能搞定的神奇框架! Jan 19, 2024 am 08:52 AM

Django:前端和後端開發都能搞定的神奇框架! Django是一個高效、可擴展的網路應用程式框架。它能夠支援多種Web開發模式,包括MVC和MTV,可以輕鬆地開發出高品質的Web應用程式。 Django不僅支援後端開發,還能夠快速建構出前端的介面,透過模板語言,實現靈活的視圖展示。 Django把前端開發和後端開發融合成了一種無縫的整合,讓開發人員不必專門學習

golang框架面試題集錦 golang框架面試題集錦 Jun 02, 2024 pm 09:37 PM

Go框架是一組擴充Go內建程式庫的元件,提供預製功能(例如網路開發和資料庫操作)。受歡迎的Go框架包括Gin(Web開發)、GORM(資料庫操作)和RESTful(API管理)。中間件是HTTP請求處理鏈中的攔截器模式,用於在不修改處理程序的情況下新增身份驗證或請求日誌記錄等功能。 Session管理透過儲存使用者資料來保持會話狀態,可以使用gorilla/sessions管理session。

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

See all articles