Javascript 基礎—變量 運算符

經過找工作筆試的洗禮,感覺自己js語法方面掌握的不是很系統,今天來梳理下——變量以及運算符。

基礎篇

和C語言的不同點:是一種弱類型語言,申明變量時不需要指定類型;變量名的命名方法也有不同;簡單類型種類也有不同;類型可以相互轉化

1.命名

是以字母,_,$開頭的,由數字,字母,下劃線 $組成的,不包括關鍵子,區分大小寫的串稱為標識符(加入了美元符號,不能以數字開頭啦)。

2. 申明

形式:var ?keyname; 可以多個一起申明,可以申明時初始化。

eg: var obj; var arr=[], objArr={};

注:(1)不需要申明類型,會根據程序的運行 自動轉換類型。(2)沒有定義就使用的,會報錯;申明了,沒有賦值的是undefinedd類型;(3)沒有使用var申明的是全局變量,關于全局變量下面會具體分析。

3.變量類型

簡單類型:boolean ?string ?number ?undefined null

注意點:

boolean:其值是true,false 也會轉換為 0,1 使用, Isload()==1;

string: 當個字符,或者字符串都是string類型;可以用單引號或者雙引號都可以var str='adafsd', str2="abc",其他同C語言;

number:表示 整數,小數;整數包括十進制,八進制(078),十六進制(ox78);數字常量:(Infinity 表示正無窮大 ?NaN 表示非數字)

null:是空類型,只有一個值null.表示沒有數據。

復雜類型:Array ?object

Array:是數組類型,可以用下標訪問,如:var ?t=[a,b,c];可以是復雜數組類型:var t=[{a=b},{a2=b}]

object: 對象類型,可以表示對象的 屬性 -值 ,鍵值對。可以嵌套任意類型。訪問用.進行訪問。

4.傳值和傳址

當變量時簡單類型時,是傳值的;如果變量時復雜變量時,是傳址的,及,傳遞的是原對象的引用(可以是指針,或者別名,指向的是原對象的的內存空間)。

5. 堆棧

簡單類型 存放在棧中,復雜類型存放在堆中,通過引用來操作;棧比堆快,棧可以共享,棧中的內容生存周期是和上下文相關,離開上下文就消亡。這里提到了共享.

eg: var a="abc"?;var b="abc";? 這時 a===b(true);因為 abc存放在棧中,可以共享。

?? var a=new string("abc"); var b="abc"; var c=new string("abc"); 這時 a!==b!==c;在堆中時運行是分配內存,不可以共享,并且堆中的東西和棧中更不相等。

順便 說下,內存管理。javascript中有內存管理機制,只要是沒有人再引用這個單元時,垃圾回收機制(GC)會自動收回內存。

垃圾回收:主要通過標記法和引用法兩種方式。標記法策略:當變量進入一個上下文就為變量標記為“進入環境”,離開上下文就標記為“離開環境”,垃圾回收機制為每個在內存中的變量都進行標記,他會為每個進入上下文的變量或者引用的變量進行清除標記,如果在這之后加上的標記就表示是準備刪除的數據。GC會回收內存,清除標記。引用法:記錄引用他的次數,不引用時減1.

內存泄露:雖然有內存管理機制(和java類似),但是也存在內存泄露的情況。比如閉包。

?


提升篇

主要總結 數據類型轉換,變量作用域,相關內容

?? 1.類型轉換

????分類:分為顯示轉換和隱式轉換

a 、顯示轉換

轉換為數字:Number(); parseInt(stirng,radix);parseFloat(string);

轉換為字符串:String(); toString();

轉換為布爾類型:Boolean(mix);

?

Number()規則

?Number(Null)===0;

Number(undefinde)=NaN;

Number("")===0;

Number(boolean)===0/1;

Number(string):當只包含數字時返回數字;當包含數字是float類型時,返回小數;空字符串返回為0;否則返回為NaN

b 、隱式轉換

1.遞增符號的轉換

????1.??當變量時字符串時,會根據Number()規則,轉換成數字,然后加++,--; 字符串中沒有數字轉換為NaN

????2.? 當變量時boolean時,會轉換為0,1 ,進行++ --操作,變量從boolean 變為數字型。

??? 3.Float 會自動+1;

?

?

?

?

總結:NaN,void,undefined,null ,以及常規的boolean-》0,1

NaN 運算符NaN(其他)結果為NaN(NaN是數字型,但是不是數字,每次都是計算機給分配的隨機值,NaN===NaN(false))

null==undefined(true)在類型轉換時unfinished=》null

null===undefined(false) 兩個是不同的類型,不相等

void(任意):void ?d ; 會將d的值清除 返回undefined,(void 返回undefined)

‘''=='0'(false)

"0"==0(true)

""==0(true)

?void(2)+4=NaN (void(2)=>undefined=》NaN+4=NaN)

?2. 作用域提升

變量必須要定義之后才能使用,但是在一個作用域中,如果先用,再定義也不會報錯,只是出來的結果會不是想象中的。這個就是變量作用域提升。

原理:函數調用時,會建立上下文,(1)聲明參數,并給參數賦值,(2)聲明函數并給函數符函數的引用(3)聲明變量,給變量賦值undefined(對于函數名和變量名重名的情況,會忽略變量的聲明,變量名依然指向函數的引用)

然后才會處理this的指向,最后調用執行;可見在執行之前會將函數內部的所有變量聲明,只是賦值為undefined,具體賦值要在執行期做。

所以類似 eg: alert(t); var t=30; alert(t); 輸出: undefined 30

轉載于:https://www.cnblogs.com/xuruweb/p/4027377.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后臺系統可擴展性學習筆記(五)負載均衡

文章目錄Load balancer(負載均衡器)請求傳輸拆解DNS 負載均衡客戶端負載均衡OSI 七層模型回顧2 層、3 層負載均衡3/4 層負載均衡7 層負載均衡在 第一節談到了系統的橫向擴展在于從單機擴展到多機,那么面臨的第一個問題就是這些機器如何協同工作,即如何調…

Struts2第一個工程helloStruts極其基本配置

前面已經準備好了Struts-2.3.15,現在就可以直接搭建Struts2的工程了。前面http://blog.csdn.net/huangchnegdada/article/details/9179041有對Struts-2.3.15的準備工作的詳述。 首先打開MyEclispe新建一個Web Project,名字就叫Struts2_0100_Introduction…

[LeetCode]Find Minimum in Rotated Sorted Array

題目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 解題方案: 直接貼代碼&…

后臺系統可擴展性學習筆記(六)反向代理

文章目錄Web代理服務反向代理反向代理作用Web代理服務 Web 代理服務指的是在客戶端資源請求和提供這些資源的 Web 服務之間充當中介的角色,代理服務可以實現在客戶端,或者從客戶端到目標服務器中間的任意環節。 例如,客戶端不直接向提供目標…

(C)單鏈表

老師版 1 #include <stdio.h>2 #include <stdlib.h>3 4 // 定于Node數據類型5 struct Node6 {7 int data; // 數據域8 struct Node *next; // 指針域9 };10 11 // 創建一個單鏈表&#xff0c;并把head節點返回&#xff1b;…

實驗:sigsuspend(),sigprocmask()

實驗&#xff1a;sigsuspend(),sigprocmask()源代碼&#xff1a;/* * Program: pause_suspend.c * To test the difference between sigsuspend() and paus(). * Author: zsl * Date: 2014-10-17 * First release. * 參見網頁&#xff1a;http://blog.csdn.net/liwentao1091/ar…

后臺系統可擴展性學習筆記(七)Service Discovery與微服務

文章目錄應用層微服務架構服務注冊查詢 Service Discovery客戶端 Service DiscoveryDNS-SD DNS-based Service Discovery服務端 Service Discovery服務注冊與注銷自注冊模式第三方注冊模式總結參考應用層 在簡單的 3 層結構中&#xff0c;Web 服務層既要處理請求&#xff0c;又…

很久沒寫代碼了,這(那)幾天真是累死了。。。先寫一個幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //雙偶的最基本類型&#xff0c;4階雙偶6 #define SCREEN_SIZE 19 //屏幕顯示不變形的最大尺寸&#xff08;主要是因為窗口大小限制&#xff09;7 #defi…

#pragma once

http://baike.baidu.com/view/1276747.htm?fraladdin 轉載于:https://www.cnblogs.com/prayer521/p/4069040.html

后臺系統可擴展性學習筆記(八)Service Mesh

文章目錄網絡傳輸可靠性將微服務控制下沉到網絡棧&#xff1f;Sidecar從 Sidecar 到 Service MeshService Mesh 部署平臺參考網絡傳輸可靠性 從計網的學習過程中我們可以知道數據在網絡傳輸中可能會出現一些異常狀況&#xff1a; 數據丟失&#xff1a;數據包可能會到達一個緩…

關于Spring batch的學習之CSV2DB

最近在學習Spring batch相關的內容&#xff0c;網上也有不少Spring Batch相關的知識&#xff0c;不過大多都是使用xml進行配置的。這里是我用注解的方式進行相關的學習心得。 首先我們來看如何將一個文本文件中的內容導入到數據庫中。 我們先來看一下我們所需要的環境。我們這里…

后臺系統可擴展性學習筆記(九)Database Replication

文章目錄數據庫擴展一致性問題Replication &#xff08;復制&#xff09;異步復制同步復制半同步復制拓撲結構單主結構多主結構無主結構復制具體措施參考數據庫擴展 之前在第一章后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要談到&#xff1a;理論上&#xff0c;有…

python中的sum函數.sum(axis=1)

看起來挺簡單的樣子&#xff0c;但是在給sum函數中加入參數。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有點不解了 在我實驗以后發現 我們平時用的sum應該是默認的axis0 就是普通的相加 而當加入axis1以后就是將一個矩陣的每一行向量相加 例如&…

后臺系統可擴展性學習筆記(十)Database Partitioning

為了提升數據庫的處理能力&#xff0c;我們把單庫擴展成多庫&#xff0c;并通過更新同步機制&#xff08;即Replication&#xff09;來保證多份數據的一致性。然而&#xff0c;在 各種復制方案下&#xff0c;每個數據庫都持有一份完整數據&#xff0c;基于全量數據提供增刪改查…

基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

隨著HDTV的普及&#xff0c;以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是&#xff0c;這些高清數字電視需要較復雜的視頻處理電路來驅動&#xff0c;比如&#xff1a;模數轉換&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫&#xff08;表&#xff09;拆分成多庫&#xff08;表&#xff09;&#xff0c;打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而&#xff0c;除卻數據量外&#xff0c;還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告&#xff0c;Java1234.com。 首先&#xff0c;來個效果圖。 關鍵代碼 1&#xff0c;界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手機助手是何物,它是怎樣神不知鬼不覺地安裝到你的電腦里的?

【電腦軟件管理中Bdsyn手機助手的問題】Bdsyn手機助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安裝的&#xff08;應該是自己自己主動安裝的&#xff09;&#xff0c;卸載以后過幾天又會出如今軟件列表里。百度搜索卻無法搜索出…

后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄NoSQL定義NoSQL種類鍵值存儲文檔存儲寬列存儲圖形數據庫NoSQL 意味著什么ACID vs. BASESQL or NoSQLNoSQL定義 不同于關系型數據庫&#xff0c;NoSQL 數據庫&#xff08;也叫非 SQL 或非關系型數據庫&#xff09;提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示&#xff0c;由于手機卡類型的不同&#xff0c;導致手機卡存儲容量以及可以存儲信息不同&#xff0c;就要涉…