前端js基础面试简单总结
1.var 变量
不用var申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式。我们在后面编写的 JavaScript代码将全部采用strict模式。
'use strict';
2.唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); NaN与任何事都不相等,包括她自己
var a = 123;
a = 'abc';
3.使用'use strict'
abc = 'Hello World!';
使用strict模式, 将不被试为全局变量,报错abc is not defined,如果没有报错,浏览器不支持此模式,应该升级浏览器版本
var abc = 'Hello World!';
console.log(a);
console.log(abc);
console.log("I'm Ok!");
console.log('I\'m \"Ok\"!');
4.测试浏览器是否支持ES6标准,如果不支持,请把多行字符串用\n重新表示出来
console.log(`多行
字符串
测试`);
5. 测试浏览器是否支持ES6模板字符串
如果不支持,请把模板字符串改为+连接的普通字符串:
var name = '小米';
var age = 12;
console.log(`你好,${name},你今年${age}?`);
6.定义好的字符串是不可变的
如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:
var str = 'test';
str[0] = 'o';
console.log(str); // t
7.JavaScript为字符串提供了一些常用方法
调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:
- substring()返回指定索引区间的子串:
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'
console.log(s);
8.javaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。要取得Array的长度,直接访问length属性
直接给Array的length赋一个新的值会导致Array大小的变化
splice(从索引开始,删除多少个元素,添加的元素)
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
arr.splice(2, 0, 'google', 'faceBook');
console.log(arr);
9.删除对象中的属性,delete 对象.属性 可以用in操作符判断某个键是否在对象中 '键' in 对象
1.in判断一个属性存在,这个属性不一定是此对象的,它可能是此对象继承得到的,
2.判断一个属性是否是该对象自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
10.函数:避免函数接收undefined,而返回NaN
function abs(num) {
if(typeof x !== 'number') {
throw 'not a number';
}else if(num >= 0) {
return num;
}else {
return -num;
}
}
console.log(abs());
11.JavaScript还有一个免费赠送的关键字arguments
它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array:
利用arguments,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值:
应用:arguments最常用于判断传入参数的个数
function abs() {
if(arguments.length == 0) {
return 0;
}
var x = arguments[0];
return x >= 0? x:-x;
}
console.log(abs());
console.log(abs(-6));
12.变量作用域 和解析赋值(const与let都具有块级作用域:)
不同函数内部的同名变量互相独立,互不影响:
内部函数可以访问到外部函数的变量,反过来不成立
JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量
function foo() {
var x = 1;
function bar() {
var x = 'A';
console.log('x in bar() = ' + x); // 'A'
}
console.log('x in foo() = ' + x); // 1
bar();
}
foo();
13.闭包,返回一个函数
// JSON
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
var json = JSON.stringify(xiaoming, null, ' ');
var json2 = JSON.stringify(xiaoming, ['name', 'skills'], ' ')
console.log(json);
console.log(json2);
// JSON.parse()把它变成一个JavaScript对象,
14.面向对象编程
// 原型对象
var Student = {
name: '小明',
height: '1.65',
run: function() {
console.log(this.name+'is running....');
}
};
function createStudent(name) {
// 基于student原型,创建一个新对象
var s = Object.create(Student);
// 初始化新对象
s.name = name;
return s;
}
var xiaoming = createStudent('小明');
xiaoming.run();
console.log(xiaoming.__proto__ == Student);
14.判断某变量是否为数组数据类型
方法一.判断其是否具有“数组性质”,如slice()方法。可自己给该变量定义slice方法,故有时会失效
方法二.obj instanceof Array 在某些IE版本中不正确
方法三.方法一二皆有漏洞,在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性,最好的方法如下:
var arr = [1, 2];
var arr2 = '111';
/*if(typeof Array.isArray==="undefined")
{
isArray.isArray = function(arg){
return Object.prototype.toString.call(arg)==="[object Array]";
};
}*/
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
console.log(isArray(arr));
console.log(isArray(arr2));
15. 获取到页面上的所有checkbox
var domList = document.getElementsByTagName('input');
var checkBoxList = [];
var len = domList.length;
while(len--) {
if(domList[len].type == 'checkbox') {
checkBoxList.push(domList[len]);
}
}
console.log(checkBoxList);
16.JavaScript事件流模型
var foo = "11"+2-"1";
console.log(foo);
console.log(typeof foo); //number类型, 没有减法就是string类型
// 考察引用数据类型的细节
var a = new Object();
a.value = 1;
b = a;
b.value = 2;
console.log(a.value);
17. 已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”
var foo = "get-element-by-id";
function combo(msg) {
var arr = msg.split("-");
for(var i = 1; i < arr.length; i++) {
// charAt() 方法可返回指定位置的字符。
// substr(start, num) 字符串中抽取从 start 下标开始的指定数目的字符。
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1, arr[i].length - 1);
}
msg = arr.join("");
return msg;
}
console.log(combo(foo));
// 变量的提升
var foo = 1;
function fun(){
console.log(foo); // undefined
var foo = 2;
console.log(foo); // 2
}
fun();
18. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。
var arrMan = [];
function getRandom(istart, iend){
// 10 -100 -89
var iChoice = istart - iend +1;
console.log(iChoice);
return Math.floor(Math.random() * iChoice + istart);
}
for(var i=0; i<10; i++){
arrMan.push(getRandom(10,100));
}
arrMan.sort();
console.log(arrMan);
浙公网安备 33010602011771号