他山之石,可为己用

他山之石,可为己用。

刷刷基础题,做做记录而已,这里的内容基本来自网上。

2018-07-06

https://www.nowcoder.com/test/question/done?tid=16585971&qid=163601

ajax描述正确的是

  • 可以实现无刷新页面
  • 用户体验好,速度快

获取<div id="content">内容…</div>标签里的文本内容

1
2
$(&quot;#content&quot;).html();
$(&quot;#content&quot;).text();

关于iframe

  • 在相同域名下,外层网页脚本可以获取 IFrame 网页内的对象
  • 可以通过脚本调整 IFrame 的大小

正则表达式 ^d+[^d]+

  • ^d+是以d字母开头并且一个或者多个d
  • [^d]+是非d字母一个或者多个

块级元素里面有一行文字,能实现文字前留白两字的css属性

  • margin-left
  • padding-left
  • text-indent

用浏览器访问www.jd.com时,可能使用到的协议有

  • 应用层用到–HTTP协议
  • 传输层–tcp协议
  • 网络层–ARP协议
  • 控制信息的传递–ICMP
  • 服务器后台处理–IP协议(DNS)
  • 打开网页—HTML

2018-07-04

腾讯2015春招web前端开发练习卷

jquery ajax中都支持的数据类型

xml,json,html,jsonp。

判断一个对象oStringObject是否为String

oStringObject instanceof String。

typeof无法直接判断对象是否为字符串。

常见的浏览器端的存储技术

cookie 是靠谱的浏览器都支持;

localStorge 比 cookie 存的更多,获取更方便,而且存储内容不会随请求发送给服务器;session 虽然需要 cookie 支持(通常存放加密过的 sessionId),但是不在浏览器端存放主要信息,排除;

IE 支持userData存储数据,但是基本很少使用到,除非有很强的浏览器兼容需求。

嵌入在HTML文档中的图像格式

gif,bmp,jpg

css3新增的属性

box-shadow,text-shadow,border-radius,rgba,

box-sizing,transition

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var arr = readline();
function getRes (arr) {
for(var i=0; i<arr.length; i++) {

if(arr[i] == ')') {
var str = "";
if(i=='1') {
str += arr.substring(2);
return i*getRes(str);
}
str = arr.slice(0,i-1) + arr.slice(i+1, arr.length);
return i*getRes(str);
}
}
if(arr == "") {
return 1;
}
}
var res = getRes(arr);
print(res);

编程题

编程题-1

请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//觉得题目很奇怪。。去重之后,返回的是那些重复元素的数组。
//1
Array.prototype.distinct = function () {
let arr = this; //获取原数组
let arrNoRepeat = Array.from(new Set(this)); //获取去重后的数组
let distinctArr = []; //存放最终结果数组
let tempArr = []; //存放重复元素的数组
for(let i = 0 ; i < arrNoRepeat.length ; i ++){
//获取当前元素的重复数组
tempArr = arr.filter(a=>{
return a === arrNoRepeat[i];
});
//判断是否存在重复
if(tempArr.length > 1){
distinctArr.push(tempArr[0]);
}
tempArr = [];
}
return distinctArr;
};
console.log([1,2,3,3,4,4,5,6,7,8,9,].distinct()); //[3,4]
//2
Array.prototype.distinct = function () {
let arr = this;
let distinctArr = [];
for(let i = 0 ; i < arr.length ; i++){
let temp = arr[i];
for(let j = 0 ; j < arr.length ; j ++){
if(temp === arr[j] && i != j){
if(distinctArr.indexOf(temp) < 0){
distinctArr.push(temp);
}
}
}
}
return distinctArr;
};
console.log([1,2,3,3,4,4,5,6,7,8,9,3].distinct()); //[3,4]

编程题-2

请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。

1
2
3
4
5
6
7
8
9
10
11
12
13
function mySort() {
var tags = new Array();//使用数组作为参数存储容器


//请补充你的代码
tags = Array.from(new Set(arguments)); //获取数据
tags = tags.sort((a,b)=>{return a-b}); //排序

return tags;//返回已经排序的数组
}

var result = mySort(50,11,16,32,24,99,57,100);/传入参数个数不确定
console.info(result);//显示结果

编程题-3

用javascript实现用户登录验证的代码。

1
2
3
4
5
6
7
8
9
10
11
function check() {
if(document.getElementById("username").value=="") {
alert("没有输入用户名!");
return false;
}else if(document.getElementById("password").value=="") {
alert("没有输入密码!");
return false;
}else{
return true;
}
}

2018-04之前春招

在网页上通过链接直接打开邮件客户端发送邮件

1
2
<a href=”mailto:ming.zhou@nowcoder.com”>发送邮件</a>
<!--mailto 后面加发送邮件地址-->

当表单中包含文件上传控件时,需要将enctype设置为()

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

属性值:

application/x-www-form-urlencoded 在发送前编码所有字符(默认)

multipart/form-data 不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。

text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

布尔类型与其它任何类型进行比较,布尔类型将会转换为number类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//布尔类型里只有这几参数个返回false,其它都为true
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false


Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0
因此:

console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);

《JavaScript权威指南》的部分相关知识点

“==”运算符(两个操作数的类型不相同时)

  • 如果一个值是null,另一个值是undefined,则它们相等
  • 如果一个值是数字,另一个值是字符串,先将字符串转换为数学,然后使用转换后的值进行比较。
  • 如果其中一个值是true,则将其转换为1再进行比较。如果其中的一个值是false,则将其转换为0再进行比较。
  • 如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,再进行比较。

对象到数字的转换

  • 如果对象具有valueOf()方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(如果需要的话)并返回一个数字。
  • 否则,如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回。(对象的toString()方法返回一个字符串直接量(作者所说的原始值),JavaScript将这个字符串转换为数字类型,并返回这个数字)。
  • 否则,JavaScript抛出一个类型错误异常。

空数组转换为数字0

  • 数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此,数组到数学的转换则调用toString()方法。空数组转换为空字符串,空字符串转换为数字0.

放在HTML里的哪一部分JavaScripts会在页面加载的时候被执行?

  • 在HTML body部分中的JavaScripts会在页面加载的时候被执行。
  • 在HTML head部分中的JavaScripts会在被调用的时候才执行。
  • head 部分中的脚本: 需调用才执行的脚本或事件触发执行的脚本放在HTML的head部分中。当你把脚本放在head部分中时,可以保证脚本在任何调用之前被加载。
  • body 部分中的脚本: 当页面被加载时执行的脚本放在HTML的body部分。放在body部分的脚本通常被用来生成页面的内容。

CSS中设置border属性为0与none的区别:

在我们设置CSS的时候,对标签元素不设置边框属性或者取消边框属性一般设置为:border:none;或border:0;两种方法均可。

border:none;与border:0;的区别体现有两点:一是理论上的性能差异;二是浏览器兼容性的差异。

1.性能差异

【border:0;】把border设为“0”像素虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。
【border:none;】把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。

2.兼容性差异

兼容性差异只针对浏览器IE6、IE7与标签button、input而言,在win、win7、vista 的XP主题下均会出现此情况。

【border:none;】当border为“none”时似乎对IE6/7无效边框依然存在

【border:0;】当border为“0”时,感觉比“none”更有效,所有浏览器都一致把边框隐藏

总结:

  1. 对比border:0;与border:none;之间的区别在于有渲染和没渲染,感觉他们和display:none;与 visibility:hidden;的关系类似,而对于border属性的渲染性能对比暂时没找测试的方法,虽然认为他们存在渲染性能上的差异但也只能 说是理论上。
  2. 如何让border:none;实现全兼容?只需要在同一选择符上添加背景属性即可

对于border:0;与border:none;个人更向于使用,border:none;,因为border:none;毕竟在性能消耗没有争议,而且兼容性可用背景属性解决不足以成为障碍。