| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> javascript入门第一篇(数据类型与作用域详解) -> 正文阅读 |
|
[JavaScript知识库]javascript入门第一篇(数据类型与作用域详解) |
数据类型(7大类): Number(数值型)?? 字符串型(String) 布尔值型(Boolean) undefined null 对象(Object)? symbol? ?? 注意: 在这里说明一下undefined 它是用来表明用户定义了变量(即初始化), 默认值就是undefined Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 字符串: ????????var str = 'hello world!'; 类型分类: 基础的数据类型存储在栈内存中, 对象类型存储在堆内存中 这里一定要注意浮点型的计算,因为js本身不是专门用于计算的一个语言, 所以在进行浮点数计算的时候,容易造成一定的误差. *数值范围: 无穷大: Infinity?? 无穷小: -Infinity 数值判断: NaN:? not a number 表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。 简洁点说就是除了拼接字符串以外, 其他要是遇上数字与非数字的符号进行逻辑运算, 都会出现NaN的情况. isNaN: 英文名为: is not Number(不是一个数字), 并且NaN进行任何的数字计算, 也是NaN. 接下来介绍一个新的关键字typeof: typeof是一个弱判断类型,用它可以来判断1 => 'number'? ?true => 'boolean'? ,? 但是它之所以是弱判断类型,正是因为它无法非常准确的识别出用户输入的数据具体是什么类型! 比如说: 我用typeof 去判断一个[1,2,3] 这样子一个数组的时候, 它所识别出来的是'object', 而这对我们开发者来说就不是很友好了. 例如: typeof 123 // "number" 下一个关键词 isFinite:
isFinite(Infinity) // false 算术运算符
逻辑运算符 && 与 两个操作数同时为true,结果为true,否则都是false 关系运算符 < ?> ?>= ?<= == != === !== var result = '55' == 55; ??? ?// true 赋值运算符 = += -= *= /= %= 二进制运算符: 异或运算符 ^ 一般可以用来做开关或者倒值 a ^= b, b ^= a, a ^= b; a // 66 否运算符 ~:
转换成字符串类型有两种方式: 1.用Object.toString() 例子:? var num = 5; 2.用String()方法 String()函数存在的意义:有些值没有toString(),这个时候可以使用String()。比如:undefined和null 转换成数值类型: Number(Obj) Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN parseInt(string,radix) parseFloat(string) +,-0等运算 var str = '500'; 转换成布尔类型:
隐式转换
逻辑操作符中的隐式转换规律注:只有undefined、null、NaN、0、空字符串会被转换为false,其余都为true 逻辑操作符一般用于语句判断中。通过判断结果返回的值进行后面的语句操作。
关系操作符的隐式转换规律(关系操作符的操作值也可以是任意类型):
相等操作符==和===的隐式转换规律:
注意这里有个坑: null == 0? 返回的是false? ?而null >= 0 返回的是true 数组 数组的创建方式: 1. var arr = new Array(3); //只写一个参数,创建一个长度为3的数组 , 数组中每一项都为 空置empty [empty,empty,empty] 2. 也可以通过字面量的形式去创建数组: 例如: var newArr = [1, 2, 3, 4] 获取数组的属性: arr[0] 遍历数组: for(var i = 0, item; item = arr[i++];) console.log(item);? ? for(var key in obj) for(var value of arr) 数组元素赋值: var arr = ['red', 'green', 'blue']; arr[2] = 'yellow'; //给下标为2的数组元素赋值 如果该元素本身有值会进行覆盖 arr[3] = '#368'; // 给下标为3的数组元素赋值 如果该元素不存在就新增 arr //["red", "green", "yellow", "#368"] arr[5] = '#f60'; //如果跨位进行赋值 空位显示 empty (空置) arr //?["red", "green", "yellow", "#368", empty, "#f60"] 数组类型判定与隐式转换var arr = [1,2,3]; typeof arr //'object' Number(arr) //NaN String(arr) // '1,2,3' Bollean(arr) // true [] == [] //false arr + '海牙' //'1,2,3海牙' arr / 2 // NaN arr + [] // '1,2,3' [] + [] //'' [2] ?- 1 //1 [1,] ?- 1 //0 [1,2] ?- 1 // NaN !![] // true 数组的基础方法: 1.isArray 用法: Array.isArray([1, 2, 3]) 返回布尔类型的值 2.join(separator) 作用: 方法将一个数组的所有元素进行拼接, 拼接成一个字符串 const elements = ['火', '空气', '水']; console.log(elements.join()); console.log(elements.join('')); console.log(elements.join('-')); 参数 separator 可选 指定分隔符号 该参数默认值为"," 返回值 一个所有数组元素连接的字符串。如果 arr.length 为0,则返回空字符串。 3.push(element1,...,elementN) 作用:?方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。 elementN 可选多个参数 当调用该方法时,新的 length 属性值将被返回。 4.unshift(element1,...,elementN) 作用:?方法将一个或多个元素添加到数组的前端,并返回该数组的新长度。 elementN 可选多个参数 当调用该方法时,新的 length 属性值将被返回。 5. pop() 方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。 从数组中删除的元素(当数组为空时返回undefined)。 6. shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。 从数组中删除的元素; 如果数组为空则返回undefined 。? 7.slice() 俗称浅拷贝 原始数组不会发生改变 返回值:?一个含有被提取元素的新数组。 arr.slice([begin[, end]]) //begin 和end都是可选参数 end 可选 8.concat(arr) 格式: newArr.concat(arr) 作用:
例子: var plants = ['西红柿', '黄瓜', '芹菜', '豆角', '土豆']; console.log(newPlants);? 返回值: 一个合并后的新数组。 9.indexOf(element, fromIndex) 作用:?方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。 参数 arr.indexOf(searchElement[, fromIndex]) searchElement fromIndex 可选 返回值: 首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1 冒泡排序: ?var arr = [4, 6, 3, 2, 7, 8, 1, 4, 5, 9]; ? ? //冒泡排序 ? ? for(var i = 0, len=arr.length; i < len - 1; i++) ? ? ? ?for(var j = 0; j < len - i - 1; j++) { ? ? ? ? ?if(arr[j] > arr[j + 1]) { ? ? ? ? ? ?var temp = arr[j] ^ arr[j + 1]; ? ? ? ? ? ?arr[j + 1] ^= temp; ? ? ? ? ? ?arr[j] ^= temp; ? ? ? ? ?} ? ? ? ?} ? ? console.log(arr); 选择排序: var arr = [4, 6, 3, 2, 7, 8, 1, 4, 5, 9], len = arr.length; ? ? //选择排序 ? ? for(var j = 0; j < len; j++) { ? ? ? var minIdx = j; ? ? ? for(var i = j + 1; i < len - 1; i++) { ? ? ? ? if(minIdx === i) { ? ? ? ? ? continue; //提前进入到下一次的循环里面 ? ? ? ? } ? ? ? if(arr[minIdx] > arr[i]) { ? ? ? ? minIdx = i; //更新最小下标 ? ? ? } ? ? ? } ? ? var temp = arr[minIdx]; ? ? arr[minIdx] = arr[j]; ? ? arr[j] = temp; ? ? } ? ? console.log(arr); ? ? 插入排序: var arr = [4, 6, 3, 2, 7, 8, 1, 4, 5, 9], len = arr.length; ? ? //插入排序 ? ? for(var i = 1; i < len; i++) { ? ? ? for(var j = i - 1; j > 0; j--) { ? ? ? ? if(arr[j - 1] > arr[j]) { ? ? ? ? ? var temp = arr[j - 1] ^ arr[j]; ? ? ? ? ? arr[j] ^= temp; ? ? ? ? ? arr[j - 1] ^= temp; ? ? ? ? } ? ? ? } ? ? } ? ? console.log(arr); 字符串方法 1.indexOf(searchValue[, fromIndex]) 注意这个跟数组的indexOf()方法有点区别. str.indexOf(searchValue[, fromIndex]) searchValue fromIndex 可选 2.split([separator[, limit]])方法 作用:?方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。 参数: str.split([separator[, limit]]) 返回值: 返回源字符串以分隔符出现位置分隔而成的一个 数组(Array) slice(): 作用:方法提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串。 参数: str.slice(beginIndex[, endIndex]) beginIndex endIndex 返回值: 返回一个从原字符串中提取出来的新字符串 trim(): 作用: 方法会从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR等)。 返回值: 一个依据调用字符串两端去掉空白的新字符串。 深刻理解 &&? 与? || 的关系 function addItem(num) { ? ? ? return (String(num)[1] && String(num)) || '0' + String(num); ? ? } 函数定义的两种方式: function 函数名() {} var 函数名 = function() {} 关于函数参数的值传递理解: 如果函数调用时 没有传入实参 对应形参默认值为 JavaScript 参数通过值传递:函数只知道值,而不是参数的位置。 如果函数改变了参数的值,它不会改变参数的原始值。 参数的改变在函数之外是不可见的。 argumentsJavaScript 函数有一个名为 arguments 对象的内置对象。 arguments 对象包含函数调用时使用的参数数组。 arguments为 (类数组) 这样,您就可以简单地使用函数来查找(例如)数字列表中的最高值: 实例jsx = findMax(1, 123, 500, 115, 44, 88); 函数分类
纯函数 纯函数(Pure Function)
非纯函数(函数副作用) 所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果. var str = '海牙'; 匿名函数 匿名函数:没有名字的函数 匿名函数如何使用: 将匿名函数赋值给一个变量,这样就可以通过变量进行调用 关于自执行函数(匿名函数自调用)的作用:防止全局变量污染。 可以用匿名函数执行IIFE(自调用函数) (function () { 柯里化函数: //纯函数 //柯理化 console.log(curryingOfAdd(1)(2)); // 3 var tranCurry = add(3); 柯里化函数是很容易产生闭包的影响, 闭包是什么? 之后会安排! 作用域: 分为全局作用域和局部作用域 在js中词法作用域规则: 1. 在javascript中 有全局作用域(script) 有局部作用域 (函数{}) ? ? ? 7.要是变量名与函数名一样,先提升变量再提升函数,这样会造成函数变量的提升会覆盖掉变量的提升. 预解析: javascript解析器解析javascript的时候,分为两个过程: 1.预解析过程? 2.代码执行过程 预解析过程:
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:33:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |