js數據類型轉換,js作用域,js創建對象的三種方式

加粗樣式## Day_03

<script>
	alert('警示框');
	prompt('彈出輸入框');
	console.log('控制檯輸出');
</script>
數據類型:簡單數據類型和複雜數據類型js的變量數據類型是隻有程序在運行過程中,根據等號右邊的值確定的.JavaScript擁有動態類型,意味着相同的變量可用作不同的類型.
簡單的數據類型:Number,String,Boolean,Udefined,Null

注意:字符串轉義字符都是用\開頭的但是這些轉義字符寫到引號裏面

eg:var str=‘我是"好人"的\n男朋友’;

boolean布爾類型在和數字類型相加運算時,true爲1 ,false爲0

eg:console.log(1+true);===>2

​ console.log(1+false);===>1

NaN不是數字:var a;

​ console.log(a+1);

​ 結果爲NaN

​ 結論:undefined與數字相加結果爲NaN

null值和數字相加爲數字

null和undefined相加爲NaN

boolean類型和undefined相加爲NaN

複雜數據類型:Object

null屬於Object類型

獲取變量的數據類型:typeof

eg: var a=1; console.log(type a);====>number

數據類型轉換:

轉換爲Boolean類型Boolean(),代表爲空,否定的值都會被轉換爲false,如’’,0,NaN,null,undifined,其他的都爲true

數字轉換爲字符串:數字.toString();String(數字);數字+’'稱之爲隱式轉換

字符轉換爲number類型:parseInt(字符串);如果字符串我小數則取整

​ parseFloat(字符串);

​ 轉換爲數字時如果字符串以數字開頭字符結尾也會轉爲數字

​ eg: var a=“2121浮海石”;parseInt(a);也會爲2121

​ var a=“浮海石2121”;parseInt(a);會爲NaN

隱式計算符號: - * / == 字符串做這三種計算式會隱式的轉換爲Number類型進行運算
算數運算

浮點數的計算因爲精度確實的問題故此不能直接用兩個浮點數運行進行比較

==號只比較數據值

===號既比較值也比較數據類型

do{}while()語句至少要執行一次

eg:

var i=0;

do{

	console.log('你好');

	i++;

}while(i<=100)

js的數組

創建數組的方式:var arr=new Array(); var arr1=[];可以放多種類型的數據

冒泡排序是一種算法,把一系列的數據按照一定的順序進行排列顯示(大到小,小到大).
arguments的使用

當我們不確定有多少個參數傳遞的時候,可以用arguments來獲取,在JavaScript中,arguments實際上他是當前函數的一個內置對象,所有函數都內置了一個arguments對象,arguments對象中儲存了傳遞的所有實參.

function fn(){
    console.log(arguments);//裏面存儲了所有傳遞過來的實參
}
fn(1,2,3);
打印控制檯上Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
這是一個僞數組
			可以進行遍歷
			具有length屬性
			按照索引的方式進行存儲的
			不具有數組的push和pop等方法
只有函數纔有arguments對象,而且每個函數都內置好了這個arguments
函數可以調用另外一個函數
匿名函數
var fun=function(aru){
   console.log('我是函數表達式'); 
}
fun('皮特');//fun是變量名不是函數名,
js中的作用域
js中的兩種作用域:全局(script標籤中的)和局部(函數內部的也叫函數作用域)
能夠區分全局變量和局部變量:在全局作用域下的變量或者在函數內部沒有生命直接被賦值的變量也爲全局變量,在函數內部的變量或者函數的形參都是局部變量.
如何在作用域鏈中查找變量的值

內部函數訪問外部函數的變量,採用的是鏈式查找的方式來決定取哪個值,這種結構我們稱之爲作用鏈.

 <script>
  var num=10;
  function fn(){//外部函數
	var num=20;
	fun();
	function fun(){//內部函數
		console.log(num);
	}
  }
	fn();
 </script>
 結果爲:20
預解析

1:我們js引擎執行js分爲兩步:預解析和代碼執行

1.1:預解析js引擎會把js裏面所有的var還有funcation提升到當前作用與的最前面

1.2:代碼執行,按照代碼書寫的順序從上往下執行

2:預解析分爲變量預解析(變量提升)和函數預解析(函數提升)
2.1:變量提升就是把所有的變量聲明提升到當前的作用域最前面,不提升賦值操作

2.2:函數提升就是把所有的函數聲明提升到當前作用於的最前面,不調用函數.

eg:

1:
	<script>
	console.log(num);
	</script>
	報錯:num is not defined
問2:
	<script>
	console.log(num);
	var num=10;
	</script>
	結果:undefined
	//執行的流程
	var num;
	console.log(num);
	num=10;3:
	<script>
	fn();
	function fn(){
    	console.log(11);	
	}
	</script>
	結果是:11
	//執行的流程
	function fn(){
    	console.log(11);	
	}
	fn();4:
	<script>
	fun();
	var fun=function fn(){
    		console.log(22);	
	}
	</script>
	結果:報錯,fun is not function
	//執行流程
	var fun;
	fun();
	fun=function fn(){
    		console.log(22);	
	}4:
	<script>
	f1();
	console.log(c);
	console.log(b);
	console.log(a);
    function f1(){
      var a=b=c=9;
	  console.log(a);
	  console.log(b);
	  console.log(c);
    }
	</script>
	結果:9,9,9,9,9,c is not defined
	//執行流程
	 function f1(){
      var a=b=c=9;//相當於 var a=9;b=9;c=9;函數內部沒有被var聲明的變量爲全局
	  console.log(a);
	  console.log(b);
	  console.log(c);
    }
    f1();
	console.log(c);
	console.log(b);
	console.log(a);
js對象

對象是由方法和屬性組成的,

​ 屬性:事物的特徵,在對象中用屬性來表示.(名詞)

​ 方法:事物的行爲,在對象中用方法來表示(動詞)

創建對象的三種方式
1:字面量創建

​ var obj={};//創建了一個空的對象

​ var obj={

​ uname:‘張三丰’,

​ age:18,

​ sex:‘男’,

​ sayHi:function(){

​ console.log(‘hi~’);

​ }

​ }

1.1:

​ (1):屬性或者方法我們採用的是鍵值對的形式 鍵 屬性名:值 屬性值

​ (2):多個屬性或者方法中間採用的是逗號隔開

​ (3):方法冒號後面跟的是一個匿名函數

1.2:使用對象

​ (1):調用對象的屬性我們採取的是對象名.屬性名 eg:obj.uname

​ (2):調用屬性還有另外一種方法 對象名[‘屬性名’] eg:obj[‘uname’]

​ (3):調用對象的方法 對象名.方法名 eg:obj.sayHi();

小結:變量,屬性,函數,方法的區別

​ 變量和屬性的相同點:都是用來保存數據的

​ 不同點:變量單獨聲明並複製,使用的時候直接寫變量名 單獨村子啊

​ 屬性在對象裏面不需要聲明,使用時候必須是 對象.屬性

​ 函數和方法的相同點:都是實現某種功能的

​ 不同點:函數是單獨聲明,並且調用 函數名(),單獨存在的

​ 方法在對象裏面的,調用的時候 對象.方法名();

2:new Object創建

​ var obj=new Object();//創建了一個空的對象

​ obj.uname=‘張三丰’;

​ obj.age=18;

​ obj.sex=‘男’;

​ obj.sayHi=function(){

​ console.log(‘hi~~~’);

​ }

3:構造函數創建

我們爲什麼需要用構造函數來創建對象呢?因爲前面兩種方式只能一次創建一個對象

構造函數:是一個特殊的函數,主要用初始化對象,既爲對象成員變量賦初始值,他總與new運算符一起使用,我們可以把對象中一些公共的屬性和方法抽取出來,然後封裝到這個函數裏面.
//構造函數名字首字母要大寫
//構造函數不需要return就可以返回結果
//我們調用構造函數必須使用new
//構造函數的屬性和方法前必須要使用this關鍵字
function Start(uname,age,sex){//構造函數
    this.name=uname;
    this.age=age;
    this.sex=sex;
    this.sing=function(sang){
        
    }
}
var ldh=new Start('劉德華',12,'男');//對象
ldh.sing('冰雨');
//構造函數和對象的關係:
				對象:是一個具體的事物
				構造函數:泛指的某一大類 
//我們利用構造函數創建對象的過程我們也稱之爲對象的實例化
//new關鍵字
	1:new 構造函數可以在內存中創建一個空的對象
	2:this就會指向剛纔創建的空對象
	3:執行構造函數的代碼,給這個空對象添加屬性和方法
	4:返回這個對象
遍歷對象

for in遍歷我們的對象

for(var 變量 in 對象){}

 var obj={
	name:'張三分',
	age:13,
	sex:'男',
	say:function(){
	console.log('sayHi~~~~');
	return 'dsad';
	}
	}
	for(var k in obj){
	console.log(k);
	console.log(obj[k]);//只能這種方式獲取屬性值不能 對象.
	console.log(obj.k);//undefined
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章