JavaScript类型使用

简介: JavaScript类型使用

js类型使用

for in和for of

for循环不能直接用来遍历对象。

for..in语句是一种严格的迭代语句,用于枚举对象中的非符号键属性(包括它的原型链上的可枚举属性),我们可以简单理解为它适合遍历对象。

const obj = {name:'xiaohong',age:18};
for (const key in obj){
    console.log(obj[key])//遍历得到的是索引值
}//输出 xiaohong 18

for...of语句是一种严格的迭代语句,用于遍历可迭代对象的元素。

const arr = [1,2,3];
for (const value of arr){
    console.log(value)//遍历得到的是值
}//输出 1 2 3

instanceof

语法

object instanceof constructor

参数

  • object

    某个实例对象

  • constructor

    某个构造函数

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

let hd = [];
let hdmc = {};
console.log(hd instanceof Array);//true
console.log(hd instanceof Object);//true
console.log(hdmc instanceof Array);//true
console.log(hdmc instanceof Object);//true

模板字面量

在模板字面量中,${}中不仅可以写变量名,还可以调用函数和写表达式。

function a(){
  return 'kunkun.com'
}
let s = `www.${a()}`;
console.log(s);//www.kunkun.com

let d = `www.${1+1}`;
console.log(d);//www.2

模板字面量的嵌套

function a(){
  return 'kunkun.com'
}
let s = `www.${`123${a()}456`}`;
console.log(s);//www.123kunkun.com456

tag标签

let a = '秃头';
let b = 'tutou';

function tag(string,...vars){
  console.log(vars);
  console.log(string);
}
tag`中文${a},英文${b}`;
//输出[ '秃头', 'tutou' ]
//   [ '中文', ',英文', '' ]

includes()方法

es6新增语法。

语法

string.includes(searchvalue, start)

参数值

参数 描述
searchvalue 必需,要查找的字符串。
start 可选,设置从那个位置开始查找,默认为 0。

返回值

类型 描述
Boolean 如果找到匹配的字符串返回 true,否则返回 false。

示例:

const str = 'Hello world';
if (str.includes('llo')){
  console.log('找到了');
}//输出 '找到了'

电话号码模糊处理

function phone(number, len = 3){
  return String(number).slice(0, -1*len)+'*'.repeat(len);
}
console.log(phone(123423487));//123423***
console.log(phone(123423487,5));//1234*****

function phone_(number, len = 7){
  return '*'.repeat(len)+String(number).slice(len-11);
}
console.log(phone_(13340307654));//*******7654

Boolean隐式转换

如果用于if语句等表达式中,会将表达式中的值的类型转换为布尔类型

数值类型除了0之外都为true,字符串类型除了 ‘’(空字符串)都是true。

其中,引用类型(如数组,对象)转换为布尔类型,值都为true

如果不同类型的值进行比较操作,遵循下列基本规则:

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
  2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
let number = 1;
console.log(number === true);//flase
console.log(number == true);//true

let number_ = '11';
console.log(number_ == true);//flase 将true转换为1,11与1不相等

//数组
let arr = [];
console.log(Number(arr));// 0
console.log(arr == false);// true

let arrTwo = [2], arrTwo_ = [1];
console.log(Number(arrTwo));//2
console.log(Number(arrTwo_));//1
console.log(arrTwo == true);// flase
console.log(arrTwo_ == true);//true

let arrThree = [1,2,3];
console.log(Number(arrThree));//NaN
console.log(arrThree == true);//false

console.log([1,2,3] == [1,2,3]);//false 因为两边都会先转换为数值类型,都为NaN,而NaN不与任何数相等(包括NaN)
console.log({} == {});//false

Number

在对于对象强制转换时,得到的值为NaN,但也有特例:

console.log(Number({}));//输出NaN
console.log(Number(
  {
    valueOf: function(){
      return 99;
    } 
  }
));//输出99

定制小数的保留位数,toFixed()函数(四舍五入):

console.log((5.567).toFixed(2));//5.57
console.log((5.564).toFixed(2));//5.56
console.log((5.564).toFixed(1));//5.6

Math

用Math内置对象实现,向上取整和向下取整,四舍五入。

console.log(Math.ceil(5.11));//6
console.log(Math.floor(5.99));//5
console.log(Math.round(5.5));//6
console.log(Math.round(5.4));//5

Math.random() 函数返回一个浮点数, 伪随机数在范围从0 到小于1

console.log(Math.random());//输出0~1,左开右闭
console.log(Math.random()*8);//输出0~8,左开右闭
//要从0取到多少,就乘多少,左开右闭
console.log(5 + Math.floor(Math.random()*(10 - 5)));//输出5~10,左开右闭

随机点名

利用Math对象的random方法,和取整方法,来实现随机取数组元素。

const stu = ['张三','李四','王五','钱六','赵七'];
let random = Math.floor(Math.random()*stu.length);
let random_2 = 2 + Math.floor(Math.random()*(stu.length - 2));
console.log(stu[random],random);//赵七 4  钱六 3
console.log(stu[random_2],random_2);//从'王五'(下标为2)开始点名。

//封装方法,传入数组,开始于第几个人(可选),结束于第几个人(可选)。返回名字
function arrayRandom(array, start = 1, end = array.length) {
  start--;//因为是传入的 开始于第几个人,而不是下标。所以需要减一。
  let index = start + Math.floor(Math.random()*(end - start));
  return array[index];
}
console.log(arrayRandom(stu,3,4));//只会输出'王五'和'钱六'。

Date

Date()和new Date()返回的值都是当前的时间,但是Date()返回的是字符串,而new Date()返回的是对象。

console.log(Date());//Sun Jun 26 2022 21:42:12 GMT+0800 (香港标准时间)
console.log(new Date());//2022-06-26T13:42:12.146Z
console.log(typeof(Date()));//string
console.log(typeof(new Date()));//object

Date() *1为NaN (new Date())*1为当前的时间戳

console.log(Date()*1);//NaN
console.log((new Date())*1);//1656251038880   (输出时间戳)

利用console.time()和console.timeEnd()可以得到某段代码的运行时间

console.time('for');
for (let index = 0; index < 100000; index++) {}
console.timeEnd('for');//输出 for: 1.555ms

封装一个格式化时间的函数

const time = new Date();
function formatTime(time, format = 'YYYY-MM-DD HH:mm:ss'){
  let thisTime = {
    YYYY: time.getFullYear(),
    MM: time.getMonth() + 1,
    DD: time.getDate(),
    HH: time.getHours(),
    mm: time.getMinutes(),
    ss: time.getSeconds()
  }
  for (const key in thisTime) {
    format = format.replace(key, thisTime[key]);
  }
  return format;
}
console.log(formatTime(time));//2022-6-26 22:12:12
console.log(formatTime(time,'YYYY年MM月DD日 HH:mm:ss'));//2022年6月26日 22:14:7
相关文章
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
66 2
|
3月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
74 4
|
3月前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
3月前
|
JavaScript 前端开发 开发者
如何在 JavaScript 中处理不同类型的错误?
【10月更文挑战第29天】通过对不同类型错误的准确识别和恰当处理,可以提高JavaScript程序的可靠性和稳定性,减少错误对程序运行的影响。
|
3月前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
4月前
|
JavaScript 前端开发
JavaScript返回判断类型有哪些?
JavaScript返回判断类型有哪些?
44 0
|
4月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
88 0
|
6月前
|
JavaScript 前端开发 UED
探秘 JavaScript 错误背后的真相——揭开异常类型的神秘面纱,让你的代码从此无懈可击!
【8月更文挑战第23天】本文深入探讨了JavaScript中常见的异常类型,包括`ReferenceError`(未定义的引用)、`TypeError`(类型错误)、`SyntaxError`(语法错误)、`RangeError`(范围错误)、`EvalError`(评估错误)以及`URIError`(URI错误),并通过示例展示了如何有效地诊断与处理这些异常。此外,还介绍了如何自定义错误类以适应特定场景的需求。掌握这些异常处理技巧对于构建稳定可靠的Web应用程序至关重要。
58 0
|
6月前
|
JavaScript 前端开发 安全
TypeScript:解锁JavaScript的超级英雄模式!类型系统如何化身守护神,拯救你的代码免于崩溃与混乱,戏剧性变革开发体验!
【8月更文挑战第22天】TypeScript作为JavaScript的超集,引入了强大的类型系统,提升了编程的安全性和效率。本文通过案例展示TypeScript如何增强JavaScript:1) 显式类型声明确保函数参数与返回值的准确性;2) 接口和类加强类型检查,保证对象结构符合预期;3) 泛型编程提高代码复用性和灵活性。这些特性共同推动了前端开发的标准化和规模化。
81 0
|
6月前
|
缓存 JavaScript 前端开发

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    45
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55