Heim >Web-Frontend >Front-End-Fragen und Antworten >Es gibt verschiedene Typen in Javascript
Es gibt 9 Datentypen: 1. String-Typ, ein in Anführungszeichen eingeschlossener Text; 2. Numerischer Typ, der zum Definieren von Werten verwendet wird; 4. Null-Typ, der darstellt ein „leerer“ Wert bedeutet, dass kein Wert vorhanden ist; 5. Undefinierter Typ, bedeutet undefinierter Wert; 7. Objekttyp, der aus Schlüsseln und Werten besteht; eine Sammlung geordneter Daten; 9. Der Funktionstyp ist ein Codeblock mit einer bestimmten Funktion.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.
Datentyp bezieht sich auf die Art des Werts, der im Programm gespeichert und manipuliert werden kann. Jede Programmiersprache hat ihre unterstützten Datentypen, um unterschiedliche Daten zu speichern, wie z. B. Text, numerische Werte, Bilder usw . .
JavaScript ist eine dynamisch typisierte Sprache, Sie müssen den Typ der Variablen nicht im Voraus angeben. Der Typ der Variablen wird außerdem während der Ausführung des Programms dynamisch bestimmt. Sie können dieselbe Variable verwenden, um verschiedene Arten von Variablen zu speichern, zum Beispiel:
var a; // 此时 a 为 Undefined a = "http://c.biancheng.net/"; // 此时 a 为 String 类型 a = 123; // 此时 a 为 Number 类型
Datentypen in JavaScript können in zwei Typen unterteilt werden:
Grundlegende Datentypen (Werttypen): Zeichenfolge, Zahl, Boolesch, leer (Null), undefiniert (undefiniert), Symbol;
Referenzdatentypen: Objekt (Objekt), Array (Array), Funktion (Funktion).
Tipp: Symbol ist ein neuer Datentyp, der in ECMAScript6 eingeführt wurde und einen eindeutigen Wert darstellt.
1. String-Typ
Der String-Typ (String) ist ein in einfache Anführungszeichen '' oder doppelte Anführungszeichen " eingeschlossenes Textstück, z. B. '123', "abc". Es ist zu beachten, dass einfache und doppelte Anführungszeichen unterschiedliche Arten der Definition einer Zeichenfolge sind und nicht Teil der Zeichenfolge sind.
2. Der Zahlentyp wird zur Definition numerischer Werte (Gleitkommazahlen) verwendet. Hinweis: Der Zahlentyp kann numerische Werte definieren. Der Zahlentyp in JavaScript kann nur Werte zwischen -(2∧53 - 1) und (2∧53 -1) darstellen.
3. Boolescher Typ
Der boolesche Typ hat nur zwei Werte: wahr (true) oder false (falsch). Zusätzlich zum Definieren von Variablen vom Typ Boolesch können Sie auch einige Ausdrücke verwenden, um Werte vom Typ „Null“ zu erhalten. Null ist ein spezieller Datentyp mit nur einem Wert, der einen „Null“-Wert darstellt Das heißt, es gibt keinen Wert, nichts, der zum Definieren eines Nullobjektzeigers verwendet wird. Verwenden Sie den Typeof-Operator, um den Typ von Null zu überprüfen. Sie werden feststellen, dass der Typ von Null Object ist, was bedeutet, dass Null tatsächlich einen speziellen Wert verwendet, der zu Object gehört. Indem wir der Variablen Null zuweisen, erstellen wir ein leeres Objekt.
5. Undefinierter Typ
Undefiniert ist auch ein spezieller Datentyp mit nur einem Wert, was undefiniert bedeutet. Wenn wir eine Variable deklarieren, ihr aber keinen Wert zuweisen, ist der Standardwert der Variablen Undefiniert.
6. Symboltyp
Symbol ist ein neuer Datentyp, der in ECMAScript6 eingeführt wurde und einen eindeutigen Wert darstellt. Der Symbolwert wird durch die Symbolfunktion generiert.
Der Attributname eines Objekts kann zwei Typen haben, einer ist die ursprüngliche Zeichenfolge und der andere ist der neue Symboltyp. Attributnamen sind vom Typ Symbol und eindeutig, sodass sie nicht mit anderen Attributnamen in Konflikt geraten.
let s1=Symbol() let s2=Symbol() console.log(s1) //Symbol() console.log(s2) //Symbol() console.log(s1===s2) //false //Symbol函数能接受字符串作为参数,表示对Symbol实例的描述 let s1=Symbol('xxx') let s2=Symbol('hhh') console.log(s1) //Symbol(xxx) console.log(s2) //Symbol(hhh) console.log(s1===s2) //false复制代码
Symbol函数前不能使用new命令,会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。相当于是一种特殊的字符串。
应用场景
作为属性名
由于 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用在对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,防止某一个键被不小心改写或覆盖。
const grade={ 张三:{address:'qqq',tel:'111'}, 李四:{address:'aaa',tel:'222'}, 李四:{address:'sss',tel:'333'}, } console.log(grade) //张三: {address: "qqq", tel: "111"} 李四: {address: "sss", tel: "333"} //对象的key值不能重复 如果有重复 后面的value值就会覆盖前面的 //使用Symbol解决,相当于一个独一无二的字符串 const stu1=Symbol('李四') const stu2=Symbol('李四') console.log(stu1===stu2) //false const grade={ [stu1]:{address:'aaa',tel:'222'}, [stu2]:{address:'sss',tel:'333'}, } console.log(grade) //李四:{address:'sss',tel:'222'} 李四:{address:'sss',tel:'333'} console.log(grade[stu1]) //李四:{address:'sss',tel:'222'} console.log(grade[stu2]) //李四:{address:'sss',tel:'333'}
属性遍历
const sym=Symbol('imooc') class User{ constructor(name){ this.name=name this[sym]='imooc.com' } getName(){ return this.name+this[sym] } } const user=new User('www') //for in的方法不能遍历到Symbol属性 像被隐藏了 for(let key in user){ console.log(key)//name } //Object.keys(obj)方法也不能遍历到Symbol属性 for(let key of Object.keys(user)){ console.log(key)//name } //Object.getOwnPropertySymbols(obj)只能获取到Symbol属性 for(let key of Object.getOwnPropertySymbols(user)){ console.log(key)//Symbol(imooc) } //Reflect.ownKeys(obj)对象的属性都能获取到 for(let key of Reflect.ownKeys(user)){ console.log(key) //name //Symbol(imooc) }
消除魔术字符串
魔术字符串指的是,在代码中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,改成一些含义清晰的变量代替。
function getArea(shape) { let area = 0 switch (shape) { case 'Triangle': area = 1 break case 'Circle': area = 2 break } return area } console.log(getArea('Triangle')) //Triangle和Circle就是魔术字符串。多次出现,与代码形成了“强耦合”,不利于后面的修改和维护。 const shapeType = { triangle: Symbol(), circle: Symbol() } function getArea(shape) { let area = 0 switch (shape) { case shapeType.triangle: area = 1 break case shapeType.circle: area = 2 break } return area } console.log(getArea(shapeType.triangle))
7、Object 类型
Object数据类型,称为对象,是一组由键、值组成的无序集合。可以用new操作符后跟要创建的对象类型的名称来创建。也可以用字面量表示法创建。在其中添加不同名(包含空字符串在内的任意字符串)的属性。
1)构造对象
使用 new 运算符调用构造函数,可以构造一个实例对象。具体用法如下:
var objectName = new functionName(args);
参数说明如下:
objectName:返回的实例对象。
functionName:构造函数,与普通函数基本相同,但是不需要 return 返回值,返回实例对象,在函数内可以使用 this 预先访问。
args:实例对象初始化配置参数列表。
示例
下面示例使用不同类型的构造函数定义各种实例。
var o = new Object(); //定义一个空对象
var a = new Array(); //定义一个空数组
var f = new Function(); //定义一个空函数
2)对象直接量
使用直接量可以快速创建对象,也是最高效、最简便的方法。具体用法如下:
var objectName = { 属性名1 : 属性值1, 属性名2 : 属性值2, ... 属性名n : 属性值n };
在对象直接量中,属性名与属性值之间通过冒号进行分隔,属性值可以是任意类型的数据,属性名可以是 JavaScript 标识符,或者是字符串型表达式。属性于属性之间通过逗号进行分隔,最后一个属性末尾不需要逗号。
在 JavaScript 中,对象类型的键都是字符串类型的,值则可以是任意数据类型。要获取对象中的某个值,可以使用对象名.键的形式,如下例所示:
var person = { name: 'Bob', age: 20, tags: ['js', 'web', 'mobile'], city: 'Beijing', hasCar: true, zipcode: null }; console.log(person.name); // 输出 Bob console.log(person.age); // 输出 20
8、Array 类型
数组(Array)是一组按顺序排列的数据的集合,数组中的每个值都称为元素(Element),每个元素的名称(键)被称为数组下标(Index)。数组的长度是弹性的、可读写的。
数组中可以包含任意类型的数据。
在 JavaScript 中定义(创建或者声明)数组的方法有两种:构造数组和数组直接量。
1)构造数组
使用 new 运算符调用 Array() 类型函数时,可以构造一个新数组。
示例:
直接调用 Array() 函数,不传递参数,可以创建一个空数组。
var a = new Array(); //空数组
传递多个值,可以创建一个实数组。
var a = new Array(1, true, "string", [1,2], {x:1,y:2}); //实数组
每个参数指定一个元素的值,值得类型没有限制。参数的顺序也是数组元素的顺序,数组的 length 属性值等于所传递参数的个数。
传递一个数值参数,可以定义数组的长度,即包含元素的个数。
var a = new Array(5); //指定长度的数组
参数值等于数组 length 的属性值,每个元素的值默认值为 undefined。
如果传递一个参数,值为 1,则 JavaScript 将定义一个长度为 1 的数组,而不是包含一个元素,其值为 1 的数组。
var a = new Array(1); console.log(a[0]);
2)数组直接量
数组直接量的语法格式:在中括号中包含多个值列表,值之间用逗号分隔。
下面代码使用数组直接量定义数组。
var a = []; //空数组 var a = [1, true, "0", [1,0], {x:1,y:0}]; //包含具体元素的数组
推荐使用数组直接量定义数组,因为数组直接量是定义数组最简便、最高效的方法。
9、Function 类型
函数(Function)是一段具有特定功能的代码块,函数并不会自动运行,需要通过函数名调用才能运行,如下例所示:
function sayHello(name){ return "Hello, " + name; } var res = sayHello("Peter"); console.log(res); // 输出 Hello, Peter
此外,函数还可以存储在变量、对象、数组中,而且函数还可以作为参数传递给其它函数,或则从其它函数返回,如下例所示:
var fun = function(){ console.log("http://c.biancheng.net/js/"); } function createGreeting(name){ return "Hello, " + name; } function displayGreeting(greetingFunction, userName){ return greetingFunction(userName); } var result = displayGreeting(createGreeting, "Peter"); console.log(result); // 输出 Hello, Peter
【推荐学习:javascript高级教程】
Das obige ist der detaillierte Inhalt vonEs gibt verschiedene Typen in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!