发表于: 2019-11-21 20:47:36
1 858
今天完成的事情:
完成复盘申请
完成CSDN文章
完成数据类型基本用法总结
JS数据类型基础介绍
JavaScript是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JS的数据类型可以分为两类
1.简单数据类型(也称基本数据类型):Undefined;Null;Boolean;Number和String。
2.引用数据类型(也称复杂数据类型),其中包括Object;Array;Function等等。
String字符串,Number数字,Boolean布尔Undefined,Null;还有一种是复杂数据类型(obiect对象)
一般情况下我们可以用typeof()来辨别一些数据的类型
typeof ( 123 ) //Number
typeof ( 'abc' ) //String
typeof ( true ) //Booleant
ypeof ( undefined ) //Undefined
typeof ( null ) //Object
typeof ( { } ) //Object
typeof ( [ ] ) //Object
typeof ( function (){} ) //Function12345678
经过试验后发现,typeof虽然能够辨别出数据的类型,但是因为null、{}、[]都是算是一个空的对象,所以它返回的都是Object,typeof 返回值有6中类型: “number,” “string,” “boolean,” “object,” “function,” 和 “undefined.”。
PS:因此使用typeof()无法细致辨别出arry、null和object。
基本数据和引用数据的特点和区别
基本数据类型:
基本数据类型的值是不可变的
任何方法都无法改变一个基本类型的值,比如一个字符串:
var s = "hello";
s.toUpperCase()//HELLO;
alert(s.toUpperCase())//HELLO;
alert(s)//hello1234
虽然s.toUpperCase()将hello改变为了HELLO,但是s的值没有变化,可得知:这里调用toUpperCase()方法后返回的只是一个新的字符串,跟原先定义的变量s并没有关系。
基本数据类型不可以添加属性和方法
var p = "change";
p.age = 29;
p.method = function(){console.log(name)};
alert(p.age)//undefinedalert(p.method)//undefined
通过上面的代码,我们发现不能给基本类型添加属性和方法 ,也再次说明基本类型是不可变的
基本数据类型的赋值是简单赋值
如果从一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值, 然后把该值复制到为新变量分配的位置上
var a = 10;
var b = a;
a++;
alert(a)//11alert(b)//10
上面的代码中,a中保存的值是10.当使用a的值来初始化b时, b中也保存了值10.但b中的10和a中的10是没有任何关联的。
b值中的10只是a值中的一个副本. 所以这a,b两个变量可以参与任何操作而不会相互影响。
基本数据类型的比较是值的比较
var person1 = 'abc';
var person2 = 'abc';
alert(person1 == person2); // true;
var person1 = 'abc';
var person2 = 'abcd';
alert(person1 == person2); // false;
var person1 = 1;
var person2 = true;
alert(person1 == person2); // true;
从person1 和person2的3个对比,我可以发现,它们的数据对比是它们值的比较,而不是数据类型的比较。
引用数据类型
引用数据类型的特点和基本数据类型相反。
引用数据类型引用类型的值是可以改变的
var a = [1,2,3];
a[0] = 0;//更改数组的一个元素
a[3] = 4;//给数组增加一个元素
alert(a);//0.2.3.4;
上面代码中可以看到,a的数组第一个1更改为了0,而且还添加一个a原来没有的第四个值4.我们可得知引用类型的值是可以改变的。
引用类型可以添加属性和方法
var person = {};
person.name = "change";
person.say = function(){alert("hello");}
alert(person.name)//change
alert(person.say)//function(){alert("hello");}
上面代码中可以得知,引用类型的数据可以给其添加属性和方法。
引用类型的赋值是对象引用
var a = {};
var b= a;
a.name = "change";
alert(a.name)//change;
alert(b.name)//change;
b.age = 29;alert(a.age)//29
alert(b.age)//29
当从一个变量向另一个变量赋值引用类型的值时, 同样也会将储存在变量中对象的值复制一份放到为新变量分配的空间中. 因为引用类型保存在变量中的值是对象在堆内存中的地址(这个地址就是指向对象在堆内存里的指针),所以两个变量都保存了同一个对象的地址,而这两个地址指向了同一个对象,因此,对于这2个变量,我们改变任何一个变量,都会互相影响。
引用类型的比较是引用的比较
var person1 = {};
var person2 = {};
alert(person1 == person2)//false
引用类型的比较是引用的比较,换句话说,就是比较两个对象保存在栈区的指向堆内存的地址是否相同,此时,虽然p1和p2看起来 都是一个字符串,但是他们保存在栈区中的指向堆内存的地址却是不同的,所以两个对象不相等。
js中的不同类型数据在运算过程中会自动进行转换。
我们先来看一串代码;
var str1 = "a";
var num1 = "1";
var bool1 = "true";
var bool2 = "false";
alert(str1 + num1);//string;
alert(str1 + bool1);//string;
alert(num1 + bool1);//number;
alert(bool1 + bool2);//number//
js运算时数据转换的运算规则为:
Number+String=String
数值和字符串相加等于字符串。
Number+Boolean=Number
数值和布尔值相加等于数值。
String+Boolean=String
字符串和布尔值相加等于字符串。
Boolean+Boolean=Number
布尔值和布尔值相加等于数值。
数组和其他类型的变量进行运算时都转化成string
数值和数组运算时
var arr=[1,2,3];
var a= "789";
alert(typeof(arr+a));
布尔值和数组运算时
var arr=[1,2,3];
var a= "true";
alert(typeof(arr+a))
对象和数组运算时
var arr=[1,2,3];
var a= {name:"my"}
alert(typeof(arr+a))
上面三组运算无一列外得到的结果都是string,证实了数组和其他类型的变量进行运算都会转化为string。
Javascript拥有动态类型,声明的变量可以用作不同的类型。可以是无值的,可以是字符串。
基础用法
1、Var x; //这里的x console.log打印出来是没有值的undefined。
Undefined只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那这个变量的值就是undefined。
2、Var x = 6; //这里x 的值等于数字6。
(1)Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后至少有一位数字)
Javascript只有一种数字类型。数字可以带小数点,也可以不带:
浮点数会自动转换为整数:
Var x1 = 34.00;//使用小数点来写
Console.log(x);//输出:1,自动转换为了整数。
Var x2 = 34;//不使用小数点来写
这两者得出的值都是整数。小数点输出的值会自动转换为整数
(2)浮点数的最高精度是17位,
Let a = 0.1;
Let a = 0.2;
Console.log(a+b);//输出:0.30000000000000004
3、Var x = “我最美”
字符串是存储字符的变量,用单引号或双引号都可以,但是要和前面保持一致,代码规范。
引号中字符串可以是任何内容,文字,英文,数字。
字符串类型有length属性,可以获取字符串的长度。
4、布尔(逻辑)只能有两个值:
Var x = true;
Var x = false
Var y = false;
使用if…else判断语句
5、null:Null类型是第二个只有一个值的数据类型,这个特殊的值是null,从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值会返回“object”的原因
6、object:
(1)直面量(字面量)创建对象,这种方法很直接:
Var obj = {a:1}
(2)构造函数创建方法,需要用到关键字New
Var obj = new object({a:1})
评论