【JavaScript】js基础知识整理
(本文为js基础知识点整理,用于个人复习所用,如有错误请指正!)
-
句子结尾可不带
;,句子可以横跨多行 -
变量命名
- 首字符必须是字母、下划线
_或美元符号$ - 所有 JavaScript 标识符对大小写敏感,JavaScript 程序员倾向于使用以小写字母开头的驼峰大小写
- 变量:
var - JavaScript 中不能使用连字符。它是为减法预留的。
first-name
- 首字符必须是字母、下划线
-
注释:同Java
-
运算
- JavaScript 从左向右计算表达式
- 数字和字符串相加,结果将是字符串
var x = "8" + 3 + 5; //835 var x = 3 + 5 + "8"; //88===等值等型!==不等值或不等型<<有符号右移<<<无符号右移**幂
-
变量类型
- undefined、boolean、string、number、object(数组属于对象)
typeof()返回数据类型- 空值 既有值也有类型(与
undefined不是一回事) null数据类型是对象,被看做不存在的事物。Undefined与null的值相等,但类型不相等
-
对象
-
访问属性:
objectName.propertyNameorobjectName["propertyName"] -
字符串、数字可以是对象(
var x = new String(".")),==相等,===不相等 -
对象是易变的:它们通过引用来寻址,而非值。
var x = person;x 和 person 是同一个对象。 -
delete关键词会同时删除属性的值和属性本身 -
getter setter
get lang(){return this.language}set lang(lang){this.language=lang}- 提供了更简洁的语法、允许属性和方法的语法相同、确保更好的数据质量、有利于后台工作
Object.defineProperty(obj,"reset",{get:function(){this.counter=0;}});
-
构造器:类似于Java构造方法
-
向构造器添加新属性(方法)
Object.prototype.newPropName="something";Object.prototype.newFuncName=function(){return something};
-
ES5新方法
// 添加或更改对象属性 Object.defineProperty(object, property, descriptor) // 添加或更改多个对象属性 Object.defineProperties(object, descriptors) // 访问属性 Object.getOwnPropertyDescriptor(object, property) // 以数组返回所有属性 Object.getOwnPropertyNames(object) // 以数组返回所有可枚举的属性 Object.keys(object) // 访问原型 Object.getPrototypeOf(object) // 阻止向对象添加属性 Object.preventExtensions(object) // 如果可将属性添加到对象,则返回 true Object.isExtensible(object) // 防止更改对象属性(而不是值) Object.seal(object) // 如果对象被密封,则返回 true Object.isSealed(object) // 防止对对象进行任何更改 Object.freeze(object) // 如果对象被冻结,则返回 true Object.isFrozen(object) -
属性元数据
writable : true // 属性值可修改 enumerable : true // 属性可枚举 configurable : true // 属性可重新配置 writable : false // 属性值不可修改 enumerable : false // 属性不可枚举 configurable : false // 属性不可重新配置
-
-
函数
- 匿名函数(变量中存储表达式):
var x = function (a, b) {return a * b}; - 自调用函数:无法对函数声明进行自调用
typeof运算符会为函数返回"function",但是函数是对象,有属性和方法arguments.length返回函数被调用时收到参数数量- 箭头函数
const x = (x, y) => x * y;- 没有 this,不适合定义对象方法
- 箭头函数未被提升,必须在使用前进行定义
- 使用
const比使用var更安全,因为函数表达式始终是常量值
- 函数不会对参数值规定数据类型、不进行检查类型/数量
- 省略的参数会被设置为
undefined;参数过多,使用arguments[i]获得参数
- 匿名函数(变量中存储表达式):
-
字符串
- 长度
.length返回字符串长度
- 查找
indexOf()返回字符串中指定文本首次出现的索引(位置),未找到返回 -1lastIndexOf()返回字符串中指定文本最后一次出现的索引(位置),未找到返回 -1search()方法无法设置第二个开始位置参数;indexOf()方法无法设置更强大的搜索值(正则表达式)。
- 裁剪
slice(start, end)正负索引,省略参数则裁剩余部分substring(start, end)不能接受负的索引substr(start, length)正负索引,省略第二个参数则裁剩余部分
- 其他函数
replace()只替换首个匹配,大小写不敏感/i;替换所有匹配/gtoUpperCase()转换大写toLowerCase()转换小写concat()连接trim()删除字符串两端的空白符charAt();[ ]如果找不到字符,[ ]返回undefined,而charAt()返回空字符串。charCodeAt()返回字符串中指定索引的字符 unicode 编码split()把字符串转换为数组
- 长度
-
数字
-
可以带小数点也可以不带
-
超大或超小的数可以通过科学记数法来写
-
JavaScript 数值始终是 64 位的浮点数
-
整数(不使用指数或科学计数法)会被精确到 15 位;小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准
-
在所有数字运算(
+除外)中,JavaScript 会尝试将字符串转换为数字 -
NaN非数值;isNaN()判断是否是数;Infinity -
toString(N)转换为N进制;toString()转换为字符串 -
toExponential()返回指数字符串值,参数指定小数位数 -
toFixed()返回字符串,参数指定小数位数 -
toPrecision()返回字符串,参数指定长度 -
valueOf()返回数值,可以将Number对象转换为原始值(所有 JavaScript 数据类型都有valueOf()和toString()方法) -
转换为数字
Number()无法转换返回NaNparseInt()允许空格,只返回首个数字,无法转换返回NaNparseFloat()允许空格,只返回首个数字,无法转换返回NaN
-
Number.
属性 描述 MAX_VALUE 返回 JavaScript 中可能的最大数。 MIN_VALUE 返回 JavaScript 中可能的最小数。 NEGATIVE_INFINITY 表示负的无穷大(溢出返回)。 NaN 表示非数字值("Not-a-Number")。 POSITIVE_INFINITY 表示无穷大(溢出返回)。
-
-
数组
-
new Array()不好!使用[]代替 -
索引值
-
.length -
indexOf()搜索元素值并返回其位置;lastIndexOf() -
find()回通过测试函数的第一个数组元素的值;findIndex()返回索引 -
每个数组元素都运行的函数
forEach(func)为每个数组元素调用一次函数map()每个数组元素执行函数,返回创建的新数组filter()创建一个包含通过测试的数组元素的新数组
-
reduce()累加器,返回总和reduceRight()从数组的末尾向前将数组中的数组项做累加
-
every()检查所有数组值是否通过测试,返回boolean -
some()检查某些数组值是否通过测试,返回boolean -
JavaScript 不支持命名索引的数组;使用命名索引,JavaScript 会把数组重定义为标准对象
-
Array.isArray()判断是不是数组,可以用instanceof Array判断,也等价于function isArray(x) { return x.constructor.toString().indexOf("Array") > -1; }
-
-
变为字符串
-
toString()逗号分隔join()自定义分隔符
-
pop()push() -
shift()删除第一个元素,返回被移出元素;unshift()反向位移,开头添加元素,返回新长度 -
delete ???删除,变为undefined,会留下未定义空洞,不好! -
splice()参数依次为 添加元素位置、删除元素个数、要添加的元素;可以用于移除元素。 -
concat()连接,返回新数组 -
slice()切片,返回新数组 -
sort()排序,接受function() -
reverse()反转 -
Math.max.apply(arr)返回最大/最小值
-
-
日期
Date() -
Math、if、switch、for
-
正则表达式
-
常用于两个字符串方法:
search()和replace() -
修饰符 描述 i 执行对大小写不敏感的匹配。 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 表达式 描述 [abc] 查找方括号之间的任何字符。 [0-9] 查找任何从 0 至 9 的数字。 (x|y) 查找由 | 分隔的任何选项。 元字符 描述 \d 查找数字。 \s 查找空白字符。 \b 匹配单词边界。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 量词 描述 n+ 匹配任何包含至少一个 n 的字符串。 n* 匹配任何包含零个或多个 n 的字符串。 n? 匹配任何包含零个或一个 n 的字符串。 -
test()通过模式来搜索字符串,返回boolean -
exec()通过模式来搜索字符串,返回文本 ornull
-
-
try throw catch finally
-
错误名 描述 EvalError 已在 eval() 函数中发生的错误 RangeError 已发生超出数字范围的错误 ReferenceError 已发生非法引用 SyntaxError 已发生语法错误 TypeError 已发生类型错误 URIError 在 encodeURI() 中已发生的错误
-
-
重复声明某个 JavaScript 变量,将不会丢它的值
-
在块中重新声明变量也将重新声明块外的变量
-
如果为尚未声明的变量赋值,此变量会自动成为全局变量
-
let
- let 关键词定义的全局变量不属于 window 对象
- 在相同的作用域,或在相同的块中,通过 let 重新声明一个 var/let 变量是不允许的
- 在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的
- 在不同的作用域或块中,通过 let 重新声明变量是允许的
-
提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为
- 函数声明
- 使用表达式定义的函数不会被提升
- 变量声明
- 通过 var 声明的变量会提升到顶端
- 通过 let 定义的变量不会被提升到顶端
- 函数声明
-
"use strict";严格模式- 不允许在不声明变量(对象)的情况下使用变量(对象)
- 不允许删除(delete)变量、对象、函数
- 不允许重名参数
- 不允许八进制
- 不允许转义字符
- 不允许写入只读属性、写入只能获取的属性、删除不可删除的属性
- 字符串 "eval","arguments" 不可用作变量
- 处于安全考虑,不允许
eval()在其被调用的作用域中创建变量 - 不允许
with语句 - 不允许使用为未来预留的关键词
-
调试
console.log()debugger
-
请避免全局变量、new、===、eval()
- 请使用 {} 来代替 new Object()
- 请使用 "" 来代替 new String()
- 请使用 0 来代替 new Number()
- 请使用 false 来代替 new Boolean()
- 请使用 [] 来代替 new Array()
- 请使用 /()/ 来代替 new RegExp()
- 请使用 function (){}来代替 new Function()
-
注意!
if (typeof myObj !== "undefined" && myObj !== null判断是否未定义- 用字符串减去字符串,不会产生错误而是返回 NaN
- 延迟 JavaScript 加载,
defer="true"延迟加载,只适用于外部脚本

浙公网安备 33010602011771号