JavaScript 一些简单的问题 和 math对象 Date对象Arrer对象 String 对象(自用)

一 JavaScript定义了几种数据类型

基本数据类型有

number

string

boolean

null

undefined

引用数据类型有

array(数组)

function(函数)

object(对象)

原始数据类型

boolean

null

undefined

number

sting

symbol(es6)

复杂数据类型

object

基本数据类型

​ 存放在栈内存中,它们是按值存放的

引用数据类型(复杂)

​ 存放在堆内存当中,它们是按引用地址存放的

变量赋值或函数传参时

​ 数据传递的方式会有不同,基本类型是复制一份值进行传递,引用类型则是传递了内存地址。

二 typeof 可以判断哪些类型?

typeof 操作符唯一的目的就是检查数据类型
类型typeof 结果
基本类型undefined“undefined”
Boolean“boolean”
Number“number”
String“string”
BigInt (ECMAScript 2020 新增)“bigint”
Symbol“symbol”
null“object”
引用类型Object(Object、Array、Map、Set等)“object”
Function“function”

所以,但我们使用 typeof 来判断引用类型变量时,无论是什么类型的变量,它都会返回 Object

为此,引入了instanceof

instanceof

instanceoftypeof 相比,instanceof方法要求开发者明确的确认对象为某特定类型。即 instanceof 用于判断引用类型属于哪个构造函数的方法。

var arr = []
arr instanceof Array // true
typeof arr // "object"
// typeof 是无法判断类型是否为数组的

NaN 是什么?有什么特别之处?

在JavaScript中,NaN代表的不是一个具体的数值。在进行不正当的运算之后,得到的结果,如图所示。是因为在不能正确的执行而出现了这样一个结果.

let a='helloworld';
console.log(a*3)//NaM
像这种,并不能得到数值的情况,就会出现结果NaN

因为NaN不代表任何数据,也就是说,它不等于任何值,当然也包括,不等于自己。

console.log(NaN==NaN);//false

但是它是属于Number类型

console.log(typeof(NaN))//number

四 为什么 console.log(0.2+0.1==0.3) 输出 false

我们在js中进行如下运算时

console.log(0.1+0.2) // 结果0.30000000000000004 而不是0.3

可以看到0.1 + 0.2 != 0.3

在0.1 + 0.2这个式子中,0.1和0.2都是近似表示的,在他们相加的时候,两个近似值进行了计算,导致最后得到的值是0.30000000000000004,此时对于JS来说,其不够近似于0.3,于是就出现了0.1 + 0.2 != 0.3 这个现象。 当然,也并非所有的近似值相加都得不到正确的结果。

解决问题
由于小数的运算可能导致精度丢失问题,那么要解决这个问题,可以将其转换为整数后再进行运算,运算后再转换为对应的小数,例如:

var a = 0.1, b = 0.2
var result = (a * 100 + b * 100) / 100
console.log(result) // 0.3
console.log(result === 0.3) // true

五 break 和continue 的区别

1、break:终止跳出结束循环(可以作用在任何地方)。常与switch分支结构合用。

2、continue:结束本次的循环,进入下一次的循环(只能运用到循环结构中)。

Math对象 Date对象 Arrer对象 String 对象

math对象
        // Math.abs()返回绝对值
        console.log(Math.abs(-0.1));//10
        // Math.floor()向下取整
        console.log(Math.floor(2.5));//2
        console.log(Math.floor(2.9));//2
        console.log(Math.floor(-2.9));//-3
        console.log(Math.floor(-2.5));//-3
        console.log(Math.floor(-2.2));//-3
       //Math.ceil() 向上取整
        console.log(Math.ceil(1.1));//2
        console.log(Math.ceil(1.9));//2
        console.log(Math.ceil(-1.9));//-1
        console.log(Math.ceil(-1.5));//-1
        console.log(Math.ceil(-2.5));//-2
        //Math.round()四舍五入
        console.log(Math.round(1.4));//1
        console.log(Math.round(1.5));//2
        console.log(Math.round(-1.4));//-1
        console.log(Math.round(-1.5));//-1
        console.log(Math.round(-1.6));//-2
        //Math.random()生成0.0-1.0(但不包含随机数里面的最大整数值以上)的随机小数 [0.1)
        console.log(Math.random());
        console.log(Math.random() + 5);//生成了一个 Math.random(5.n,6){5.n-6(但不包含6)的随机小    数} Math.random(0.n,1)=Math.random(0.n+5,1+5)==Math.random(5.n,6)
        console.log(Math.random() * 5);// 相当于 Math.random(0,1)*5=Math.random(0,5)随机0-5(但不包含5)的包含小数的一个数字
        console.log(Math.floor(Math.random() * 5));//生成一个随机0-4的整数
        console.log(Math.floor(Math.random() * 5) + 5);//Math.random(0,1)*5就是Math.random(0*5,1*5)==Math.random(0,5) 然后Math.random(0+5,5+5)==Math.random(5,10) 取5到9的随机整数
        console.log(Math.random() - 5);//-5.n -4.n
        //Math.max() 最大值
        console.log(Math.max(5, 4, 3));//5
        //Math.min()最小值
        console.log(Math.min(1, 3, 4,));//1
        // Math.pow() 返回级的几次幂
        console.log(Math.pow(2, 3));//8
        // Math.sqrt() 对一个数进行开方运算
        console.log(Math.sqrt(11));//2
Date对象
    *//date 对象的创建*
    var date1 = new Date();*//获取当前时间*

    console.log(date1);*//Fri Sep 10 2021 17:15:25 GMT+0800 (中国标准时间)*

    *//给 dater2 传一个表示时间的字符串*

    var dater2 = new Date('2018/09/06 09:00:00');*//Thu Sep 06 2018 09:00:00 GMT+0800 (中国标准时间)
    *//getfullYear() 获取年*

    console.log(date1.getFullYear());
    *//getMonth() 获取月 获取月的时候,系统默认是11个月,所以我们+1就行*

   console.log(date1.getMonth() + 1);
    *//getDay() 获取星期*

    console.log(date1.getDay());
    *//getDate() 获取日1-31*

   console.log(date1.getDate());
    *//getHours() 获取小时*

   console.log(date1.getHours());
    *//getMinutes() 获取分钟*

   console.log(date1.getMinutes());
    *//getSeconds() 获取秒*

    console.log(date1.getSeconds());
    *//getMilliseconds() 获取毫秒 (1秒=1000毫秒)*

   console.log(date1.getMilliseconds());
    *//二 获取时间戳*

    *// 时间戳 就是 从1970年1月1日 0时0分0秒 到当前所华为的 毫秒数*

    console.log(date1.getTime());
Array对象
 var arr = [1, 2, 3, 4, 5, 6, 7]

    *//push 在末端添加一个元素。*

    arr.push(1)

    console.log(arr);
    //unshift 在首端添加一个元素。*

    arr.unshift('z');

   console.log(arr);
    *// shift 删除数组首端的一个元素。*

    arr.shift()

   console.log(arr);
    *// pop 从末端删除一个元素。*

    arr.pop()

    console.log(arr);
    *// splice 删除数组某一位置的元素。(从第几个索引开始,删除几个索引)*

    arr.splice(0, 1)

    *//!!替换/插队*

    var zzy = [1, 2, 3, 4]

    *// 语法 zzy.splice(从第几个索引,删除几个,添加想加入的数据)*
    zzy.splice(2, 0, 'zzy', 11, 22)
    console.log(zzy);
    console.log(zzy[2]);
    *// concat 连接多个数组。*
    var z = [1, 2, 3]
    var x = ['z', 's', 'q']
    var y = ['#', '$', '!']
   *// 语法 数组名.concat(数组名)*
    var ne1 = z.concat(x, y)
    console.log(ne1);
    *// join 将数组转换为字符串。*

    *// 语法 数组名.join(拼接的符号) 在重新赋予 一个新数组*

    arr = arr.join('符号');

    console.log(arr);
        //forEach  数组的循环遍历
        //这个函数里面可以指定 三个形参
        //1 遍历 数组当中的 每一个元素
        //2 遍历 数组元素 对应的 索引
        //3 代表数数组本身
        var arr = [1, 2, 3, 4, 5, '张三', "李四"];

        arr.forEach(function (item, index, arr) {
            console.log('名称' + item);
            console.log('索引' + index);
            console.log('本身' + arr);
            console.log(item, index, arr);
        });
        //reverse 翻转数组

        var arr = [1, 2, 3, '刘德华'];
        arr.reverse();

        console.log(arr.reverse());
        // slice(开始索引,结束索引) 截取数组(但不包含结束索引)
        var arr = ['a', 2, 's', 'r'];

        // 值为0 那么就是克隆数组
        var arr1 = arr.slice(0);
        console.log(arr1);

        // 第一个值 开始索引
        // 第二个值 结束索引  但不包括结束索引
        // 截取 第一个值和第二值 之间的数组
        console.log(arr.slice(0, 2));

        //includes(数组元素) 判断数组中 是否存在 这个元素
        //返回值 为 true false
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        console.log(arr.includes(111));

        //includes(第一个值 数组元素,第二个值 从索引几开始搜索)
        console.log(arr.includes(10, 0));
        //Array.isArray() 检测是非为数组
        // 是返回true  假返回false
        var arr = [1, 2, 3, 4, 5];
        var obj = {
            name: '刘德华',
        }

        console.log(Array.isArray(arr));
        console.log(Array.isArray(obj));
        // indexOf()  从前往后扫描,扫描到 就返回改元素的索引
        // lastIndexOf()从后往前扫描, 扫描到 就返回改 元素的索引

        var arr = [1, 2, 3, 4, 5];
        console.log(arr.indexOf(5))//从前往后

        console.log(arr.lastIndexOf(5));//从后往前

        console.log(arr.indexOf(6));//如果 改数组 没有次元素,那么将返回-1
        //sort() 对数组进行排序,会改变原数组
        // 第一种 ,不带参数 一般是在对 字符串 按照unicode编码值,从小到大排序
        //如果元素都是数字 ,那么会影式的转换成 字符串 参与排序
        var arr = [1, 5, 8, 9, 3];
        arr.sort();//
        console.log(arr.sort());

        // 第二种 带参数
        // 参数要求 : 是一个函数
        //a,b 分别代表 数组中的 任意某两个元素
        var arr1 = [1, 55555, 2, 5, 87, 1, 6, 988];
        arr1.sort(function (a, b) {
            return a - b;//从大到小
            // return b - a;//从小到大
        });
        console.log(arr1);

        // 正常 工作场景中
        // a.对象属性 
        // b.对象属性
        // 然后根据对象属性 的 值 进行对象的排序
        var users = [
            { name: "张三", age: 24, height: 176 },
            { name: "李四", age: 22, height: 175 },
            { name: "王五", age: 26, height: 178 },
            { name: "赵六", age: 27, height: 176 },
        ];
        users.sort(function (a, b) {
            //当然也可以写逻辑判断
            if (a.age == b.age) {//如果年龄 想等
                return a.height - b.height;//就按照身高大小来排
            } else {
                return a.age - b.age//反之 就按照年龄来排序
            }

        })
        console.log(users);
String 对象

​ var str = ‘abcd efgh’;

    *//字符串也有 索引 和 长度*

    *//也可以用for循环遍历*

    *//可可以使用[索引]的语法,获取对应的字符*

    *//注意:但是 字符串 无法使用[]语法 修改*


    console.log(str[0]);*//输出索引为0的字符*

    console.log(str.length);*//字符串的长度
    *// charAt(索引号)*

    *//返回指定位置的字符*

    console.log(str.charAt(1));*//获取索引为1 的字符*

    console.log(str.charCodeAt(1));*//获取字符的Unicode编码
    *//index(字符)* 

    *//获取当前字符 在字符串当中的 索引号*

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

    *//如果搜索的字符 没有 那么返回 -1*

    console.log(str.lastIndexOf('fff'));*//-1
    *//concat(被连接的字符串名)*

    *//字符串名.concat(被连接的字符串名)*

   var back = 'red';

    console.log(str.concat(back));*//abcd efghred
    *//slice(开始索引,结束索引!! 但不包过结束索引)*

    *// 截取字符串   结束索引!!*

    console.log(str.slice(0, 1));*//a
    *//substr(开始索引,截取的个数!!)*

    *//截取字符串  截取的个数!!*

    console.log(str.substr(0, 2));*//ab
    *//toUpperCase()全部转为大写*

    console.log(str.toUpperCase());
    *//toLowerCase()*

    *//全部转为小写*

    console.log(str.toLocaleLowerCase());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值