JS进阶笔记2

简介: JS进阶笔记2

2.3 数据结构


image.png


typeof 操作符


  • typeof 操作符返回一个字符串,表示未经计算的操作数的类型


image.png


  • 数字类型


  • 包括整型数字和浮点型数字
  • 整型:十进制、十六进制(0X或0x开头)、八进制(ECMAScript标准不支持,严格模式下不支持)
  • 浮点型:3.1   .666    1.23e11 // 1.23 * 1011       2.321E-12  // 2.321 * 10-12
let a = 10;
let b = 1.2;
let c = 2.1E-2;
console.log(typeof a);  // number
console.log(typeof b);  // number
console.log(typeof c);  // number


  • 字符串类型


  • 由单引号或双引号括起来的一组16位Unicode字符组成的字符序列
  • 转义字符:\n   \r   \"   等
  • 查阅String文档


  • 字符串模板


  • 允许嵌入表达式的字符串字面量
  • 使用反引号 (``键盘数字1左边) 来代替普通字符串中的用双引号和单引号
  • 字符串模板保留其中的换行,可以包含特定语法(${expression})的占位符
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."


  • 布尔类型


  • true false a==1
  • 进行算术操作时,true转换为1,false转换为0
var b = true;
console.log(typeof b);    // boolean
console.log(true * true); // 1 * 1 = 1


  • null与undefined


  • null表示空或不存在的引用,参与算术运算时自动转换为0,布尔运算时转换为false
  • undefined表示变量已声明但没有赋值,布尔运算时转换为false,出现的典型情况:
  • 变量声明后没有赋值
  • 调用函数时,应提供的参数未提供
  • 对象的属性没有赋值时
  • 数组定义后没有给元素赋值,元素的值
  • 函数没有返回值,默认返回值


  • 对象类型


  • 类似与Java语言中的对象,数据+处理数据的函数,数据称为对象的属性,函数称为对象的方法
  • 内置对象:window document  Date Math等等
  • 自定义对象
  • 数组(Array)是一种内置对象
  • typeof 返回值都是object


  • 函数类型


  • 有名函数,函数名称为函数变量;匿名函数赋值于某变量后,该变量为函数变量
  • 函数变量的值为整个函数定义语句
let fn1 = function() { console.log('调用fn1'); }
let fn2 = () => { console.log('调用fn2'); }
function fn3() { console.log('调用fn3'); }
console.log(typeof fn1);  // function
console.log(typeof fn2);  // function
console.log(typeof fn3);  // function
console.log(fn1);      // function() { console.log('调用fn1'); }
console.log(fn2);      // () => { console.log('调用fn2'); }
console.log(fn3);      // function fn3() ... ...


  • 数据类型转换 ——加号(+)


  • 加号(+)两边存在字符串或引用类型时,加号为字符串连接符,非字符串操作数自动转换为字符串,引用类型调用其toString()方法转换为字符串。
console.log("我是" + 2019 + "级学生"); // "我是2019级学生"
console.log("15" + 5);    // 155
console.log("abc" + true + 1);  // abctrue1
console.log("abc" + null + 2);  // abcnull2
console.log(true + 1 + "abc");  // 2abc
console.log(null + 2 + "abc");  // 2abc
console.log("abc" + function() {console.log('a')}); 
// abcfunction(){console … …
console.log({name: '张三'} + 1); // [object Object]1
console.log({name: '张三', toString: function(){return '人员' + this.name}} + 1); 
// 人员张三1
console.log(1 + function() {console.log('a')}); 
// function() {console.log('a')} 
  • 加号(+)两边为数值、布尔、null或undefined类型时,加号为加法算术操作符,此时非数值操作数自动转换为数值型,若存在不能转换为数值的操作数(仅有undefined),结果为NaN。
console.log(true + 1);    // 2, 1 + 1
console.log(undefined + 1);   // NaN
console.log(null + 2);    // 2, 0 + 2
console.log(true + 1 + “abc”);  
// 2abc,true与1间的加号为算术加法,其结果(2)与“abc”间连接字符串
console.log("abc" + 2 + null);  // abc2null


  • 数据类型转换 ——其它操作符


  • 减(-)、乘(*)、除(/)、取余(%)两边存在字符串时,字符串自动转换为数字(如有无法转换操作数,则结果为NaN)
  • ++和--,字符串自动转换为数字,无法转换的结果为NaN
console.log("20" / 2);    // 10
console.log("20" / "2");  // 10
console.log("20" - "a");  // NaN
let n = "6";
let s = "a";
console.log(++n);   // 7
console.log(++s);   // NaN
let a = true;
console.log(++a);    // 2
  • >、<、==、<=、>=:表达式包含数字和字符串时,字符串自动转换为数字,不能转换成数字的字符串或其它类型值,表达式均返回false
  • 当比较两个字符串的大小时,按ASCII码比较,比较true false null 的大小时,按值比较( true=1, false=null=0)
console.log("10" > 9);  // true
console.log("a" > 0);   // false
console.log("a" <= 0);  // false
console.log(true > 0);  // true
console.log(null < 1);  // true
console.log(undefined < 1); // false


  • 相等与严格相等


  • ==  左右两边的值相等即返回true,数据类型可不相同
  • === 左右两边的值相等,且数据类型相同,返回true
  • != 和 !== 与以上类似,其区别在数据类型是否相同
console.log('15' == 15);  // true
console.log('15' === 15); // false
console.log(true == 1);   // true
console.log(false == 0);  // true
console.log(true === 1);  // false


  • 显式类型转换


  • Number(value) 全局函数,对value进行整体转换,value中包含无法转换为数字的部分时,转换失败,返回NaN
  • parseInt(stringNum, [radix])全局函数,将stringNum转换为整数,radix为2-36之间的数字,指定转换时进制,进制为10时可省略
  • parseFloat(stringNum)全局函数,将stringNum转换为浮点数


  • ... 扩展运算符(对象展开符)


  • 扩展运算符( spread )是三个点(...),其作用是将一个数组转为用逗号分隔的参数序列
  • 常用于函数调用时传递参数


image.png


扩展运算符提供了数组合并的新写法。注:Array.concat()方法用于连接两个数组


image.png

相关文章
|
8天前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
3月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
104 24
|
2月前
|
存储 缓存 自然语言处理
深入理解JS | 青训营笔记
深入理解JS | 青训营笔记
31 0
|
3月前
|
前端开发 JavaScript 安全
JavaScript进阶-JavaScript库与框架简介
【7月更文挑战第11天】JavaScript库和框架加速Web开发,但也带来挑战。选择适合项目、团队技能的库或框架,如React、Angular、Vue,是关键。保持依赖更新,注意性能优化,避免过度依赖。遵循最佳实践,确保安全性,如防XSS和CSRF。学习基础,结合代码示例(如React计数器组件),提升开发效率和应用质量。
51 1
|
3月前
|
资源调度 JavaScript 前端开发
JavaScript进阶 - JavaScript库与框架简介
【7月更文挑战第5天】JavaScript库和框架构成了前端开发的核心,如jQuery简化DOM操作,Angular、React和Vue提供全面解决方案。选择时要明确需求,避免过度工程化和陡峭学习曲线。使用版本管理工具确保兼容性,持续学习以适应技术变化。示例展示了jQuery和React的简单应用。正确选择和使用这些工具,能提升开发效率并创造优秀Web应用。
41 2
|
3月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
76 2
|
3月前
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
48 0
|
3月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch(&#39;url&#39;).then(r =&gt; r.json()).then(data =&gt; console.log(data)).catch(err =&gt; console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
78 0
|
3月前
|
存储 JavaScript 前端开发
JavaScript进阶 - 浏览器存储:localStorage, sessionStorage, cookies
【7月更文挑战第8天】Web开发中的客户端存储技术,如`localStorage`, `sessionStorage`和`cookies`,用于保存用户设置和跟踪活动。`localStorage`持久化存储,`sessionStorage`随页面会话消失。两者提供基本的增删查改操作,但有大小限制和安全风险。`cookies`适合会话管理,可设置过期时间并能跨域。使用时注意存储量、安全性和跨域策略,选择适合场景的存储方式。
110 0
|
3月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
73 0
下一篇
无影云桌面