• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

anluo小毛虫

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

前端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);

posted on 2018-03-01 16:34  anluo小毛虫  阅读(739)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3