顯示具有 typeof 標籤的文章。 顯示所有文章
顯示具有 typeof 標籤的文章。 顯示所有文章

2022年8月31日 星期三

JS - - Object,Array的宣告 , Object 基本型別 及 物件型別 - Object 的建立 - 屬性的存取 - typeof 型別的判斷 - == ===


JavaScript 內建的型別主要可以分成基本型別 (Primitives) 與物件型別 (Object) 兩大類。 
基本型別又分成 string、number、boolean、null、undefined 幾種,
除了以上幾種之外,其他都可以歸類至物件型別 (Object)

一.物件的定義 - Object :
「An object is a collection of properties and has a single prototype object.」
一個物件可以是個零至多種屬性的集合,而屬性是鍵 (key) 與值 (value) 之間的關聯。 
一個屬性的「值」可以是某個基本型別,也可以是另一個物件,甚至可以是一個函數。
物件可以是瀏覽器預先定義好的,當然也可以是由自己定義物件的屬性與內容

1>Object 的宣告方式:
var person={}                                 //或是  var person=new Object();
person["NAME"]="蔡聰進";
person["GENDER"]="male";

2>Array的宣告方式:
var tempData=[];
tempData.push(rec);


1>建立 Object 的2種方法如下:
方法1> new Object() 方式,建立物件 , 再設定物件屬性
var person = new Object(); 
person.name = 'Kuro'; 
person.job = 'Front-end developer'; 
person.sayName = function() { alert( this.name ); };

方法2>  JSON 方式 , 建立物件
var person = { 
       name: 'Kuro', 
       job: 'Front-end developer', 
       sayName: function() { alert( this.name ); } 
};

 -->
直接用大括號 { },即可建立起一個新的物件,並且在建立物件的同時直接指定屬性至該物件內。
這種建立物件的方式稱為「物件實字 (Object literal)」,同時也是 JSON 格式的核心語法。



二.屬性的存取 , 建議用   Object["Name"]
存取屬性 的2種方法如下:
var person = { 
      name: 'Kuro', 
      job: 'Front-end developer', 
      sayName: function() { alert( this.name ); } ,
      "001" : "Hello",
}; 
1>由.Name存取
person.name;                   // 'Kuro' 
person.sayName();         // ƒ sayName()
person.001;                   // SyntaxError: Unexpected number 

2>由 [Name]存取
person["name"];             // 'Kuro' 
person["sayName"];      // ƒ sayName()
person["001"]              // Hello 

--> 屬性的新增及刪除
person["age"]=50;
console.log("person[age]]",person["age"]);  //50
delete person["age"];
console.log("person[age]]",person["age"]);  //undefined

--> 判斷屬性是否存在
方法1:  ==undefined
if (person["age"]!=undefined){
    console.log("property age exist");
}

方法2:  (age in person)  , true/false
if (age in person){
    console.log("property age exist");
}

方法3: person.hasOwnProperty('age')
if (person.hasOwnProperty('age')) {
    console.log("property age exist");
}

-->
if (person["name"]!="undefined"){
    console.log("1 property name exist");
};
if ("name" in person){
    console.log("2 property name exist");
};
     if (person.hasOwnProperty('name')) {
    console.log("3 property name exist");
};


三.型別的判斷 - typeof  -  typeof 運算子回傳的東西都是「字串」

typeof true; // 'boolean' 
typeof 'Kuro'; // 'string' 
typeof 123; // 'number' 
typeof NaN; // 'number' 
typeof { }; // 'object' 
typeof [ ]; // 'object' Array
typeof undefined; // 'undefined' 
typeof window.alert; // 'function' 
typeof null; // 'object'


--> typeof   Array   --> 得到 "object" , 非 array
      由 Array.isarray([]) 判斷  //true
       Array.isarray( [4,"a","b","c"] );  //true
       Array.isarray("abc");   //false


四.==   ===  比較
var a = 10; 
var b = "10"; 
console.log( a == b ); // true 
console.log( a === b ); // false

console.log(null == undefined) ; //true
console.log(null === undefined) ; //false

-->
在 JavaScript 這門程式語言中,大家會提倡盡量使用 === 來取代 == 的原因。
-->
!= 的版本會做自動轉型,而 !== 則不會做自動轉型。