日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js判断对象是否为空对象_js对象

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js判断对象是否为空对象_js对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

七種數據類型 number string bool symbol undefined null object

五個Falsy 值 undefined null 0 NaN ''

對象 object

第七種數據類型,唯一一種復雜類型

  • 定義
  • 無序的數據租戶
  • 鍵值對的集合
  • 寫法
  • let obj = {'name':'frank','age':18}
  • let obj = new Object({'name:'frank'})
  • console.log({'name':'frank','age':18})

細節

  • 鍵名是字符串,不是標識符,可以包含任意字符 (沒有數字鍵名,沒有數字下標)
var obj ={'':1 } obj {"":1} var obj = {2:'222222' } Object.key(obj) // 打印出鍵名 ["2"]
  • 引號可以省略,省略之后就只能寫標識符
  • 就算引號省略了,鍵名也還是字符串(重要)

屬性名:每個key都是對象的屬性名(property)

屬性值:每個value都是對象的屬性值

奇怪的屬性名

  • 所有的屬性名會自動變成字符串
let obj ={ 1:'a', 3.2:'b', 1e2:'true' 1e-2:true, .234:true, 0xFF:true }; Object.key(obj) =>["1","100","255","3.2","0.01","0.234"]
  • 細節
  • Object.key(obj)key得到obj的所有key

變量作屬性名

  • 如何用變量做屬性名
  • 之前都是用常量做屬性名
  • let p1 ='name'
  • let obj ={p1:'frank'}這樣寫,屬性名為'p1'
  • let obj={[p1]:'frank'}這樣寫,屬性名為'name'
var obj ={{a}:1111 }obj {xxx:1111}
  • 對比
  • 不加[]的屬性名會自動變成字符串
  • 加了[]則會當做變量求值
  • 值如果不是字符串,則會自動變成字符串

對象的隱藏屬性

  • 隱藏屬性
  • js中的每一個對象都有一個隱藏屬性
  • 這個隱藏屬性儲存著其共有屬性組成的對象的地址
  • 這個公有屬性組成的對象叫做原型
  • 也就是說,隱藏屬性存儲著原型地址(公有屬性)

代碼示例

  • var obj ={}
  • obj.toString()// 居然不報錯
  • 因為obj的隱藏屬性對應的對象上有toString()

對象的增刪改查

刪除屬性

  • delete http://obj.xxx或 dele obj['xxx'] (刪除屬性名)
  • 即可刪除obj的xxx屬性
  • 請區分 屬性值為undefined 和 不含屬性名
var obj ={name:'frank',age:18} obj.name = undefined obj {name:undefined,age:18} delete obj.name true obj {age:18}
  • 不含屬性名
  • 'xxx' in obj === false (注意要加單引號)
  • 含有屬性名,但是值為 undefined
  • 'xxx' in obj && obj.xxx === undefined
  • 注意 obj.xxx === undefined
  • 不能斷定 'xxx'是否為obj的屬性
  • 類比
  • 你有沒有衛生紙
  • A:你有沒有衛生紙?//不含屬性名
  • B:有,但是沒帶//含有屬性名,但是值為 undefined

查看所有的屬性(讀屬性)

  • 查看自身所有屬性
  • Object.keys(obj) Object.values(obj)只想知道值 Object.entries(obj) 知道key 和value
  • 查看自身+共有屬性
  • console.dir(obj)
  • 或者自己依次用 Object.key 打印出obj.__proto__
  • 判斷一個屬性是自身的還是共有的
  • obj.hasOwnProperty('toString')

原型

  • 每個對象都有原型
  • 原型里存著對象的共有屬性
  • 比如obj的原型就是一個對象
  • obj.__proto__存著這個對象的地址
  • 這個對象里有toString/constructor/valueOf等屬性
  • 對象的原型也是對象
  • 所以 對象的原型也有原型
  • obj={}的原型即為所有對象的原型
  • 這個原型包含所以對象的共有屬性,是對象的根
  • 這個原型也有原型,null

查看屬性

  • 兩種方法查看屬性
  • 中括號語法:obj['key']
  • 點語法:obj.key
  • 坑新人語法:obj[key]//變量key值一般不為'key'
  • 請優先用中括號語法
  • 點語法會誤導你,讓你以為key不是字符串
  • 等確定不會弄混兩種語法,再改用點語法
var obj ={name:'frank',age:18} obj['name'] "frank" obj.name "frank"

重要

obj.name等價于 obj['name']

obj.name不等價于obj[name] 這里的[name]是變量, 而我們要的是name是字符串

真正等價的情況

let name = 'frank' obj[name]等價于obj['frank']

let list =['name','age','gender'] let person ={name:'frank',age:18,gender:'man'} for(let i =0;i<list.length;i++){ let name =list[i] console.log(person________) }填空 console.log(person[name])

修改或增加屬性(寫屬性)

  • 直接賦值
let obj ={name:'frank'}//name 是字符串 obj.name = 'frank' // name 是字符串 obj['name'] = 'frank' obj[name]='frank' 錯誤 因為name值不確定 obj['na'+'me']='frank' let key = 'name';obj[key]= 'frank' let key = 'name'obj.key ='frank'//錯誤 因為 obj.key 等價于obj['key']
  • 批量賦值
  • Object.assign(obj,{age:18,gender:'man'})

修改或增加共有屬性

  • 無法通過自身修改或增加共有屬性
  • let obj={},obj2={}//共有toSring
  • obj.toString='xxx'只會改obj自身屬性
  • obj.toString 還是在原型上
  • 我偏要修改或增加原型上的屬性
  • obj.__proto__.toString='xxx'//不推薦用__proto
  • Object.prototype.toString='xxx'
  • 一般來說,不要修改原型,會引起很多問題
var common = {'國籍':'中國',hairColor:'black'} undefined var person ={name:'frank'} undefined person.__protp__=common {國籍: "中國", hairColor: "black"} console.dir(person) Objectname: "frank"__protp__: {國籍: "中國", hairColor: "black"}__proto__: Object undefined

修改隱藏屬性

  • 不推薦使用__proto__
  • let obj ={name:'frank'}
  • let obj2={name:'jack' }
  • let common ={kind:'human'}
  • obj.__proto__ =common
  • obj.__proto__=commom
  • 推薦使用 Object.create
  • let obj =Object.create(common)
  • obj.name = 'frank'
  • let.name2 =Object.create(commom)
  • obj2.name='jack'
  • 規范大概的意思是.要改就一開始就該,別后來再改

5:'name' in obj和obj.hasOwnProperty('name') 的區別

前者可以查看是否有這個屬性,后者查看這個屬性是自身還是共有的

總結

delete obj['name']
'name'in obj//false
obj.hasOwnProperty('name')//false
Object.keys(obj)
console.dir(obj)
obj['name']
obj.name//name是字符串
obj[name]//name是變量
改自身obj['name']='Tom'
批量改自身Object.assign(obj,{age:18,...})
改共有屬性:obj.__proto__['toString']='xxx'
改共有屬性:Object.prototype['toString']='xxx'
改原型:obj.__proto__=common
改原型:let obj=Object.create(common)
注:所有_proto__代碼都是強烈不推薦寫的
基本同上:已有屬性則改;沒有屬性則增

總結

以上是生活随笔為你收集整理的js判断对象是否为空对象_js对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。