JavaScript Series-----OBJECTJ Hash-based storage <Key,Value> Value
1. Questions raised
In the JavaScript series-----object based on hash<key,value> storage Key (1), we infer that the object is stored in a hash structure, and that the object's properties are represented as multiple <Key,Value> Key-value pairs.
Where the data type of key is a string, but we do not say what data structure is stored with value, in this article we will continue to discuss: thestorage type of value-----The core of the blog post
Since the properties of an object are stored as key-value pairs in JavaScript, we know that there are three types of object properties that need to be known:
-
- Properties of the base data type
- Properties of reference data types
- Data accessor Properties
Let's use an example to illustrate these three types of attributes:
varperson ={};p erson.name= ' Zhang San '; First, the basic data type property Person.age= 18;p Eron.getname=function() {///second, the property of the reference data type, because the function is also an object in JSreturn This. Name; Object.defineproperty (person,' Isadult ', {//third, accessor Property Get:function () { if(Person.age >= 18) { return true; } Else { return false; }}); Console.log (Person.isadult); True
With the above example, we recognize three types of attributes, then let's talk about how value represents these three properties!
Data structure of Value in 2.<key,value>
In JavaScript Advanced Programming (Third Edition), this is the attribute: attributes are created with some eigenvalues that the JavaScript engine uses to define their behavior.
Below, we discuss the characteristics of each of the three attributes, respectively:
(1). Properties of the base data type
var person == ' Zhang San '; var descriptor=object.getownpropertydescriptor (person, "name"); Console.log (descriptor); Output Result:
(2). Properties of the reference data type
var person =function () { returnthis. Name;}
Person.child={name: "Zhang Four"}; var descriptor = object.getownpropertydescriptor (person, ' getName '); Console.log (descriptor); Output Result:
var descriptor1 = object.getownpropertydescriptor (person, ' child ');
Console.log (Descriptor1); Output Result:
enumerable |
&NBSP; |
< Span class= "Objectbox objectbox-number" >true |
value |
&NBSP; |
object {name=" Zhang Four "} |
(3). Accessor Type properties
var person = {};object.defineproperty ( person, ' isadult ' function () { if (person.age >= 18 return true ; else { return false ; } }}); var descriptor=object.getownpropertydescriptor (person, "Isadult"
configurabl E
set |
&NBSP; |
< Span class= "Objectbox objectbox-undefined" >undefined |
From the above three examples can read, Value is also a pair of <Key,Value> representation of a structure. Of course, we can also consider value as an object because the object is inherently a struct.
So the answer to the question is obvious:
objects are stored in a hash structure, with the <Key,Value> key value pairs representing the properties of the object, the data type of key is a string, and the data type of value is struct, that is, the object is a <String,Object> The HASHMAP structure of the type is stored.
Meaning of the various characteristic values in 3.Value
(1) Characteristics of data types (basic data type properties and reference data type properties)
As we can see from the second section, there are four attribute values for the properties of the data type:
Characteristics |
Data type |
Significance |
Configurable |
Boolean |
Indicates whether this property attribute can be modified, false, this property cannot be deleted (for delete), and cannot be modified |
Enumerable |
Booelan |
Indicates whether this property can be enumerated, false, cannot be enumerated (for for-(in)) |
Writeable |
Boolean |
Indicates whether the value of the property can be modified to false when the value of this property cannot be modified |
Value |
Set according to the specific value |
The data value of the property, where the new value is saved at the time the property is written |
(2) attributes of accessor types (properties of accessor types)
Characteristics |
Data type |
Significance |
Configurable |
Boolean |
Indicates whether this property attribute can be modified, false, this property cannot be deleted (for delete), and cannot be modified |
Enumerable |
Booelan |
Indicates whether this property can be enumerated, false, cannot be enumerated (for for-(in)) |
Get |
function |
The value of the property is returned by the function |
Set |
function |
Modify the value of the property, and the parameter is the value of the property. |
a little extension (other attributes in value):
The Value in <Key,Value> is a struct, and does it only preserve the attributes enumerated above? ------of course not.
For example: In value that describes the four attributes of the data type, value can also represent an object, or a string, or a number, then there is a description of the type represented by value, except that the JS engine is processed in the background and we cannot see it.
of course, there must be another feature in the value of <Key,Vaule>, (base)-----Base is a reference type of data that points to the object that owns the property. When value is a function type, when the function is called, it is initialized with base to initialize the this pointer (which, of course, is beyond the scope of our discussion).
JavaScript series-----objects based on hash storage (<Key,Value> Value) (2)