- ‘5’+3和‘5’-3 输出多少
console.log('5'+3);//字符串拼接数字 就是53
console.log('5'-3);//使用了减法,就是默认有个隐式转换,把字符串五变成number型
2.下面输出是什么
var val = 'hello';
console.log('Value is'+(val ==='hello')?'something':'Nothing');
//something
var ary =[0,1,2];
ary[10] = 10
console.log(ary.filter(function(x){
return x === undefined
}));//返回【】 filter 筛选数组 把满足条件的筛选出去
console.log(ary); //[0,1,2,空*7,10]
function showCase(value) {
switch(value){
case'A':console.log('Case A');
break;
case'B':console.log('Case ');
break;
case undefined:console.log('undefined');
break;
default:console.log('Do not know')
}
}
showCase(new String('A'))//虽然说是创建新的A进showcase里面,但是把整个创建的过程整体传进去,就会导致default 识别的String "A"
console.log(new String("A"));
console.log([] == []) //false
基本的数据类型放在栈里面的,直接存储的是值,而引用数据类型是放在堆里面的,每个空间都不一样,当我们访问引用数据类型时,对象、数组、函数,先从栈中找到该对象的内存地址,然后再从堆内存中取所需的数据,尽管他们的值是一样的,但是在堆中还是开辟两个空间独立存放这些引用数据类型
var months = ['Jan','March',"April","June"];
months.splice(1,0,"Feb");
console.log(months);
splice(index,num) 删除功能 index是起始位置,num删除几个
splice(index,0,insetValue)插入功能 有0就插入功能 index插入的位置,第三个值是插入的项
splice(index,num,insetValue) 替换功能 index起始位置,num删除的项数,插入任意数量的项
var trees =['xyz','xxx','test','ryan','apple']
delete trees[3]
console.log(trees.length); //5
console.log(trees); //['xyz','xxx','test','空,'apple']
使用delete删除元素并不会使数组长度改变,只会把原来的元素值变成undefined
使用splice(start,count),这样删除就会改变原数组的长度 第二个参数是删除元素的个数,如果没有的话,就会删除包括索引值在内的后面的所有元素
var newtrees = trees.splice(3,1)
console.log(trees.splice(3,1));
console.log(trees.length);
console.log(trees);/* 这样返回的长度就是4 真正把改元素删除 */
console.log(null instanceof Object);
null typeof是object instanceof判断的是构造函数的prototype类型 这是一个bug 虽然说type 出来的null是object ,由于null并不是有object的原型创造出来的 所以返回false null有自己的Null类型,而不是object类型
console.log(null === undefined);
两者的数据类型都不相同 不全等于
console.log(null == undefined);
null和undefined都代表着无效的值 所表示的内容也有相似性 但是不能绝对等于
console.log(NaN ==NaN);
NaN是代表着不等于任何数字,而不是一个数字的有很多,所以并不能相等 2abc 就是返回NaN 3abc也是返回NaN 肯定不等于
9.typeof的返回数据类型 undefined、 string、boolean、number、 Object、Function
10.undefined和not defined区别not defined
not defined未发现。如果在函数中调用了一个没有定义的变量,就会提示not defined。
undefined:未定义。是JavaScript的一种数据类型。定义一个变量但是未给它赋值,alert的时候就是undefined了。
11.apply 和call的异同
相同:
可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象
不同点:
apply:最多只能有两个参数——新this对象和一个数组。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。
call:则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
更简单地说,apply和call功能一样,只是传入的参数列表形式不同
12.typeof obj ==='object' 判断obj是不是一个对象有什么潜在弊端?如何避免这个弊端
主要是为了区分null和对象,因为使用typeof 来判断null,返回的结果也是object。
解决方法
if((obj!==null)&&(typeof obj==='object')&&(toString.call(obj)!="[object Array]")){}
上述方法分别判断obj不能为null,数组的情况,