JavaScript数据类型

概览

number类型

注意,js不区分小数,整数和Number

123  //整数123
123.1  //浮点数123.1
1.233e3  //负数
NaN     //Not a Number 有时候你需要打印判断这个是不是一个数字,它会打印NaN,说明这个不是一个数字

 

 

字符串类型

'abc'  
"abc"

 

 

布尔值类型

true  ,   false

 

逻辑运算

&&  //两个都为真,结果为真
||  //一个为真,结果为真
//真的为假,假的为真

 

比较运算,大部分情况用绝对等于

=
==  //等于,类型不一样,值一样,判断为true
=== //绝对等于,类型一样,结果一样,判断为true

注意 NaN===NaN 为 false,只能通过isNaN(NaN)判断这个数值是不是true

 

尽量避免使用浮点数运算,存在精度问题

// 浮点数问题,比如 1/3 === 1-2/3 为false
console.log(1/3 === 1-2/3);//false

我们可以通过绝对值运算判断

console.log(Math.abs(1/3 - (1-2/3)) < 0.00001);//true

 

null和Undefined

  • null 是空
  • undefined 是未定义

 

 

数组

注意,定义的数组类型可以不是相同的

//定义数组
var  arr = [1,2,3,4,5,"hello",null,true];
//取数组
console.log(arr[0]);

取数组,如果越界,就会报错 undefined

 

对象

注意,对象是大括号,数组是中括号

//Java中定义对象 Person person = new Person(1,2,3,4);
var person = {
  name : "nanxi",
  age: 5,
  tags : ["js","java","web"]
};
console.log(person);

image.png

建议每个代码都写严格检查模式

在第一行写"use strict";就进入严格检查模式

"use strict";//严格检查模式,预防JavaScript的随意性导致产生的一些问题
    // i = 0;//这个会被定义为全局变量,多个js文件容易出错,设置为严格检查模式就会认为这种语法错误
    var i = 0;

 

字符串类型详解

转义字符

代码 输出
\' 单引号
\" 双引号
\& 和号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\b 退格符
\f 换页符

 

多行字符串的编写可以依靠tab键上面的引号

"use strict";
    //多行字符串的编写可以依靠tab键上面的引号
    var string = `hello
    world
    你好
    `;

 

【重点掌握1】ES6 新特性,支持,模板字符串,比如在字符串里写${name},注意是`` 不是“”

//ES6 新特性,支持,模板字符串,注意是`` 不是“”
    var name = "zhangsan";
    var str = `姓名 + ${name}`;
    console.log(str);

 

字符串长度

console.log(str.length);

转换成为大写,注意,这里是方法

console.log(str.toUpperCase());

 

获取s字符在str字符串的位置

console.log(str.indexOf('s'));

结果是 10

【重点掌握2】String字符串的不可变性

str2 字符串为student

如果更改str2的第二个元素为s,str2字符串并没有发生变化,str2字符串还是student

如果更待str2字符串为book,str2字符串发生变化,str2字符串为book

image.png

 

【重点掌握3】substring方法,编程的时候经常用到

  • substring(start: number, end?: number): string;他是包含前面不包含后面
//substring(start: number, end?: number): string;他是包含前面不包含后面
var str2 = "student";
console.log(str2.substring(1));// tudent  从0开始计数,拿到1到最后的代码
console.log(str2.substring(1,3));//tu     从0开始计数,拿到1到3之前的代码,包括前面的1,不包括后面的3

 

数组类型详解

 

Array可以包含任意类型的数据

image.png

  1. 注意:slice()是非常常见的截取数组的方式,slice() 可以截取Array的一部分,返回一个新数组,类似于String中的substring
  2. push()可以在尾部添加元素,pop()是弹出尾部的元素
//定义一个数组,数组是[],
    var arr = [1, 2, 3, 4, 5, 6, "1", "2"];

    //push()可以在尾部添加元素,pop()是弹出尾部的元素
    arr.push("a")
    console.log(arr);

弹出结果,发现push("a")将"a"压入尾部

image.png

最后还是用这个

 

这个时间的愚蠢

image.png

  1. unshift()可以在尾部添加元素,shift()是弹出尾部的元素
  2. 排序 sort()
  3. 元素翻转 resverse() ,也就是前面的翻转到后面,后面的翻转到前面

image.png

数组关注如何存数据,如何取数据,其他方法都可以自己实现

 

对象

可以理解JavaScript的对象是由若干个键值对组成,格式为

var 对象名 = {
    属性名: 属性值,
  属性名: 属性值,
  属性名: 属性值
}

 

var car = {type:"Fiat", model:"500", color:"white"};

 

JavaScript中的所有的键是字符串,值是任意对象

image.png

image.png

 

在JavaScript中使用new关键字,就是定义了一个JavaScript对象

var x = new String();        // Declares x as a String object
var y = new Number();        // Declares y as a Number object
var z = new Boolean();       // Declares z as a Boolean object

不建议在对象中定义String, boolean,number 的数据类型,因为会降低程序的运行效率

 

 

注意,带()调用的是函数结果,而带()调用函数对象,例如

 

不带()调用函数对象演示

<p id="demo"></p>

<script>
function toCelsius(f) {
  return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius;
</script>

运行结果是

image.png

 

带()调用函数结果演示

<p id="demo"></p>

<script>
function toCelsius(f) {
  return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius(90);
</script>

image.png

 

流程控制

image.png

image.png

 

for循环中

  • 使用使用in打印key的值,
  • 使用使用of可以打印value的值,注意,这是ES6的新特性
var arr = ["7","8","9"];
//使用in打印key的值
for (var key in arr){
  console.log(key);//0, 1, 2
}

//使用of可以打印value的值,注意,这是ES6的新特性
for(var value of arr){
  console.log(value);//7, 8, 9 
}

 

 

Map和Set(ES6新特性)

 

"use strict";
//在没有ES6加入的Map之前,我们写一个学生的成绩,学生的姓名,须要用到两个变量,如下
var names = ["tom","jack","haha"];
var scores = [100,90,80];
// 但是这样连表查询麻烦,而且越长越慢,所以ES6加入Map
var map = new Map([["tom",100],["jack",90],["haha",90]]);
console.log(map);
  • set()方法是新增或修改
  • delete()方法是删除
  • has()是否包含某个元素

image.png

 

迭代

 

//迭代数组
var arr = ["5","6","7","8","9"];
for(var x of arr){
  console.log(x);//5, 6, 7, 8, 9
}

//迭代map
var map = new Map([["xiaoming","100"],["wangwei","88"],["lisi","98"]]);
for(var x of map){
  console.log(x);//["xiaoming","100"],["wangwei","88"],["lisi","98"]
}

//迭代set
var set = new Set([7,8,9]);
for(var x of set){
  console.log(x);//7, 8, 9
}

 

 

 

 

posted @ 2020-11-27 10:48  realize00  阅读(23)  评论(0)    收藏  举报