javascript知识点总结 javascript内容
大家好,今天给各位分享javascript知识点总结的一些知识,其中也会对javascript内容进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
javascript中如何判断类型汇总
前言
我们在写封装的插件或者函数时,常常用到JS的数据类型判断,典型的案例就是深度拷贝函数用到数据类型判断,这个知识点在面试的时候也是经常考到的一个问题。本文就来给大家总结了下javascript中判断类型的相关资料,下面话不多说了,来一起看看详细的介绍吧
String
一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以也要包含那些可以使用的字符串instanceof。
// Returns if a value is a string
function isString(value){
return typeof value==='string'|| value instanceof String;
}
Number
From typeof more things than just an ordinary number will return"number" like NaN and Infinity. To know if a value really is a number the function isFinite is also required.
从类型更多的东西,而不仅仅是普通的数字将返回像NaN和无限的“数字”。要知道值是否真的是数字,函数isFinite也是必需的。
// Returns if a value is really a number
function isNumber(value){
return typeof value==='number'&& isFinite(value);
}
Array
在javascript数组中不是像java和其他语言中那样的真正数组。它们实际上是对象,因此typeof将为它们返回“对象”。要知道某些东西是否真的是一个数组,它的构造函数可以与Array进行比较。
// Returns if a value is an array
function isArray(value){
return value&& typeof value==='object'&& value.constructor=== Array;
}
// ES5 actually has a method for this(ie9+)
Array.isArray(value);
Function
// Returns if a value is a function
function isFunction(value){
return typeof value==='function';
}
Object
很多东西都是javascript中的对象。要知道值是否是可以具有属性并循环的对象,可以将其构造函数与Object进行比较。它不适用于从类创建的对象,因此可以使用instanceof运算符。
// Returns if a value is an object
function isObject(value){
return value&& typeof value==='object'&& value.constructor=== Object;
}
Null& undefined
大多数情况下,您不需要显式检查null和undefined,因为它们都是假值。然而,要做到这一点,下面的功能就可以了。
// Returns if a value is null
function isNull(value){
return value=== null;
}
// Returns if a value is undefined
function isUndefined(value){
return typeof value==='undefined';
}
Boolean
对于布尔值, typeof就足够了,因为它返回true和false的“boolean”。
// Returns if a value is a boolean
function isBoolean(value){
return typeof value==='boolean';
}
RegExp
RegExp是对象,因此唯一需要检查的是构造函数是否为RegExp。
// Returns if a value is a regexp
function isRegExp(value){
return value&& typeof value==='object'&& value.constructor=== RegExp;
}
Error
javascript中的错误与许多其他编程语言中的“异常”相同。它们有几种不同的形式,例如Error,TypeError和RangeError。一个instanceof语句对他们来说已经足够了,但我们还要确保我们还检查错误所具有的“message”属性。
// Returns if value is an error object
function isError(value){
return value instanceof Error&& typeof value.message!=='undefined';
}
Date
日期实际上不是javascript中的数据类型。但要知道是否有某个Date对象,可以使用instanceof进行检查。
// Returns if value is a date object
function isDate(value){
return value instanceof Date;
}
Symbol
// Returns if a Symbol
function isSymbol(value){
return typeof value==='symbol';
}
JavaScript中闭包的含义是什么以及如何使用它
本文章将分享有关JavaScript中闭包的知识点,有一定的参考价值,希望对大家有所帮助
闭包是函数和声明该函数的词法环境的组合,当内部函数被保存到外部时,将会生成闭包而闭包会导致原有作用域链不释放,造成内存泄露,但同时闭包也是非常有用的,因为它可以将某些数据与对该数据的操作进行关联。
例:
function demo(){
var name='张三';// name是demo()创建的局部变量
function demo1(){//demo1()是demo()中的内部函数(闭包)
console.log(name);//使用父函数中声明的变量
}
demo1();
}demo();运行结果
函数demo()中创建一个名为name的局部变量和一个名为demo1()的内部函数。 demo1()函数只能在demo()函数体内使用。 demo1没有自己的局部变量。但是由于内部函数可以访问外部函数的变量,所以demo1()可以访问父函数demo()中声明的变量名name。但是如果有同名变量 name在demo1中被定义,则会使用自己函数中定义的 name。该例子说明嵌套函数可以访问在其外部作用域中声明的变量。
如果上面的代码改成这样结果会如何?
function demo(){
var name='张三';
function demo1(){
console.log(name);
}
return demo1;
}
var newDemo= demo();
newDemo();运行结果
由运行结果可知两段代码结果一样,内部函数demo1()在执行之前被外部函数返回形成闭包,在这种情况下,newDemo()是运行demo时所创建的函数demo1的一个引用,所以当调用newDemo()时,变量名name仍可以传递给console.log(name)。
示例
function num(x){
return function(y){
return x+ y;
};}
var num1= num(2);
var num2= num(3);
console.log(num1(2));// 4
console.log(num2(2));// 5运行结果
定义一个函数num(x)用于接收一个参数x并返回一个新函数,这个新函数还接收一个参数y并返回x和y之和;同时又定义了两个新的值num1,num2都为闭包且传值分别为2,3.
在JavaScript函数中this指向的是什么
今天将和大家分享JavaScript中一个重要知识点this,有一定的参考价值,希望对大家学习有所帮助。
对于this关键字的学习经常让我们感到困惑,搞不清楚它在函数中指代的是什么以及如何去使用它,今天将在文章中为大家详细介绍有关this的知识
【推荐课程:JavaScript教程】
上下文和this关键字
在JavaScript中,函数有自己的执行上下文,在这里要特别注意下函数的执行上下文不是关于它是如何声明的,也不是说函数的作用,而是关于如何在代码中调用它,我们在调用此执行上下文时就会用到this。当this从函数内部访问时,实际上就是访问其执行上下文。
调用函数方式与this
上下文取决于函数的调用方式,我们可以通过4种不同的方式来调用上下文的函数,因此this也有四种不同的指向
1.一个基本的函数调用
2.使用上下文对象调用函数,也称为隐式绑定。
3.使用call()或调用函数apply(),也称为显式绑定。
4.通过bind()方法绑定
基本函数调用
基本函数调用是调用函数的最简单方法
例:
<script type="text/javascript">
var name="张三";
function student(){
console.log(this.name);
}
student();
</script>
在这个例子中可以看出student()是从全局范围内调用函数,因此这里的this指代的是全局范围,所以输出结果为“”张三“”
隐式绑定
当函数被一个对象“包含”的时候,我们称函数的this被隐式绑定到这个对象里面了
<script type="text/javascript">
var student={
name:"张三",
obj:function(){
console.log(this.name)
}
}
student.obj();
</script>
obj函数虽然被放到对象里去但是并不会因为它被定义在对象的内部就会与外部产生区别,在隐式绑定下,obj通过this还是可以访问到student对象中的a属性
显示绑定
可以使用call()或apply()方法调用函数,其执行上下文显式绑定到对象,call和apply可以改变this指向
例:未使用call()或者apply()时
<script type="text/javascript">
var name="张三";
var obj={
name:"李四",
fun:function(){
console.log(this.name);}}
obj.fun();
</script>
利用call()使this指向window
<script type="text/javascript">
var name="张三";
var obj={
name:"李四",
fun:function(){
onsole.log(this.name);}}
obj.fun.call(window);
</script>
bind()绑定
bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,但是bind不执行函数,只返回一个可供执行的函数
<script type="text/javascript">
var a={
b: function(){
var func= function(){
console.log(this.c);
}
func.bind(this)();
},
c:'Hello!'
}
a.b();
</script>
通过bind方法将this指向c对象中的内容。
OK,本文到此结束,希望对大家有所帮助。