36, 编写一个方法求一个字符串的字节长度, 假设: 一个英文字符
占用一个字节, 一个中文字符占用两个字节
- function num(str) {
- var num1 = str.length;
- var num2 = 0;
- for (var i = 0; i <str.length; i++) {
- if (str.charCodeAt(i)>= 10000) {
- num2++;
- }
- }
- console.log(num1 + num2)
- }
37, 简单概括浏览器事件模型, 如何获得资源 dom 节点
浏览器事件模型分为三个阶段
1, 捕获阶段
2, 目标阶段
3, 冒泡阶段
38, 写一段 ajax 提交的 js 代码
- var xhr =xhr();
- function xhr(){
- if(window.XMLHttpRequest){
- return window. XMLHttpRequest();
- }else if(window.ActiveXObject){
- try {
- return new ActiveXObject("Microsoft.XMLHTTP");
- }catch (e) {
- try {
- return new ActiveXObject("Msxml2.XMLHTTP");
- }catch (ex) { }
- }
- }
- }
- xhr.open("get","url","true");
- xhr.onreadystatechange=function()
- {
- if (xhr.readyState==4 && (xhr.status==200||xhr.status==304))
- {
- document.getElementById("myDiv").innerhtml=xhr.responseText;
- }
- }
- xhr.send();
39, 判断字符串是否是这样组成的, 第一个必须是字母, 后面可以
是字母和数字, 下划线总长度为 5-20(请使用正则表达式)
- function if_fit(str){
- var reg=/^[A-Za-z]{1}\w{5,20}/g;
- var result=str.search(reg);
- return result;
- }
40, 截取字符串 abcdefg 的 efg
- var str="abcdefg";
- console.log(str.slice(4));
41, 在 CSS 引入的方式有那些, link 和 @import 的区别是什么
内联方式, 嵌入方式, 链接方式, 导入方式
区别 1:link 是 XHTML 标签, 除了加载 CSS 外, 还可以定义 RSS 等其他事务;@import 属于 CSS 范畴, 只能加载 CSS.
区别 2:link 引用 CSS 时, 在页面载入时同时加载;@import 需要页面网页完全载入以后加载.
区别 3:link 是 XHTML 标签, 无兼容问题;@import 是在 CSS2.1 提出的, 低版本的浏览器不支持.
区别 4:link 支持使用 Javascript 控制 DOM 去改变样式; 而 @import 不支持.
42, 将字符串 helloChina 反转输出
var str = "helloChina";
方法 1:console.log( str.split("").reverse().join("") );');
方法 2:for (var x = str.length-1; x>=0; x--)
- {
- document.write(str.charAt(x));
- }
方法 3:var a=str.split("");
- var rs = new Array;
- while(a.length)
- {
- rs.push(a.pop());
- }
- alert(rs.join(""));
43, 为什么无法定义 1px 左右高度的容器
IE6 下这个问题是因为默认的行高造成的, 解决的方法也有很多, 例如: overflow:hidden | zoom:0.08 | line-height:1px
44, FireFox 中标签的居中问题的解决办法
{margin:0px auto;}
45, 请写出 XHTML 和 css 如何注释
XHTML:<!-- 注释内容 -->
css:/ 注释内容 */
46, 现在想调节一下父元素的透明度, 但是又不影响子元素的透明
度, 怎么破
方法 1: 用 RGBA
方法 2: 再加一层与父元素同级的 div 装载子元素 定位到子元素原位置
47, 简述 cookies sessionStorage 和 localStorage 的区别
区别: cookie 数据始终在同源的 http 请求中携带 (即使不需要), 即 cookie 在浏览器和服务器间来回传递. 而 sessionStorage 和 localStorage 不会自动把数据发给服务器, 仅在本地保存. cookie 数据还有路径(path) 的概念, 可以限制 cookie 只属于某个路径下. 存储大小限制也不同, cookie 数据不能超过 4k, 同时因为每次 http 请求都会携带 cookie, 所以 cookie 只适合保存很小的数据, 如会话标识. sessionStorage 和 localStorage 虽然也有存储大小的限制, 但比 cookie 大得多, 可以达到 5M 或更大. 数据有效期不同, sessionStorage: 仅在当前浏览器窗口关闭前有效, 自然也就不可能持久保持; localStorage: 始终有效, 窗口或浏览器关闭也一直保存, 因此用作持久数据; cookie 只在设置的 cookie 过期时间之前一直有效, 即使窗口或浏览器关闭. 作用域不同, sessionStorage 不在不同的浏览器窗口中共享, 即使是同一个页面; localStorage 在所有同源窗口中都是共享的; cookie 也是在所有同源窗口中都是共享的. web Storage 支持事件通知机制, 可以将数据更新的通知发送给监听者. Web Storage 的 api 接口使用更方便.
48, 简述 ECMASCRIPT6 的新特性
1. 增加块作用域
2. 增加 let const
3. 解构赋值
4. 函数参数扩展 (函数参数可以使用默认值, 不定参数以及拓展参数)
5. 增加 class 类的支持
6. 增加箭头函数
7. 增加模块和模块加载(ES6 中开始支持原生模块化啦)
8.math, number, string, array, object 增加新的 API
49, Apply 和 call 方法的异同
相同点: 两个方法产生的作用是完全一样的, 第一个参数都是对象;
不同点:
call()方法参数将依次传递给借用的方法作参数, 即 fn.call(thisobj, arg1,arg2,arg3...argn), 有 n 个参数
apply()方法第一个参数是对象, 第二个参数是数组 fn.apply(thisobj,arg), 此处的 arg 是一个数组, 只有两个参数
50, 在 javascript 中什么是伪数组, 如何将伪数组转化为标准数组
这里把符合以下条件的对象称为伪数组:
1, 具有 length 属性
2, 按索引方式存储数据
3, 不具有数组的 push,pop 等方法
伪数组 (类数组): 无法直接调用数组方法或期望 length 属性有什么特殊的行为, 不具有数组的 push,pop 等方法, 但仍可以对真正数组遍历方法来遍历它们. 典型的是函数的 argument 参数, 还有像调用 getElementsByTagName,document.childNodes 之类的, 它们都返回 NodeList 对象都属于伪数组. 可以使用 Array.prototype.slice.call(fakeArray) 将数组转化为真正的 Array 对象.
51, Js 和 nitive 交互的方法与问题
实现 JS 和 Native 有两种方式:
js 与 java 互相调用
第一种: shouldOverrideUrlLoading(WebView view, String url)
通过给 WebView 加一个事件监听对象 (WebViewClient) 并重写 shouldOverrideUrlLoading(WebView view, String url)方法. 当按下某个连接时 WebViewClient 会调用这个方法, 并传递参数 view 和 url
第二种: JS 和 Java 互调
WebView 开启 JavaScript 脚本执行
WebView 设置供 JavaScript 调用的交互接口
客户端和网页端编写调用对方的代码
JS 调用 JAVA
- JS : window.jsInterfaceName.methodName(parameterValues)
- native: webView.addJavascriptInterface(new JsInteration(), "androidNative");
下面给出一个实例, 方便理解
- webView.addJavascriptInterface(new JsInteration(), "androidNative");
- @JavascriptInterfacepublic void helloJS(){...}
- window.androidNative.helloJS();
Java 调用 JS
webView 调用 js 的基本格式为 webView.loadUrl("javascript:methodName(parameterValues)")
调用 js 无参无返回值函数: String call ="javascript:sayHello()";webView.loadUrl(call);
调用 js 有参无返回值函数: String call = "javascript:alertMessage(\"" + "content" + "\")"; webView.loadUrl(call);
调用 js 有参数有返回值的函数
Android 在 4.4 之前并没有提供直接调用 js 函数并获取值的方法, 所以在此之前, 常用的思路是 java 调用 js 方法, js 方法执行完毕, 再次调用 java 代码将值返回.
Android 4.4 之后使用 evaluateJavascript 即可.
- private void testEvaluateJavascript(WebView webView) {
- webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {
- @Override
- public void onReceiveValue(String value) {
- Log.i(LOGTAG, "onReceiveValue value=" + value);
- }});
- }
注:
参数类型如果是简单的 int 或 String, 可以直接传, 对于复杂的数据类型, 建议以字符串形式的 json 返回.
evaluateJavascript 方法必须在 UI 线程 (主线程) 调用, 因此 onReceiveValue 也执行在主线程.
当 native 与 js 交互时存 cookie 看到很多人遇到过这样一个问题, cookie 存不进去, 网上有很多解释方案, 但是很多没说到重点上, 这里直接贴一下代码:
- public static void synCookies(Context context, String url, String version) {
- CookieSyncManager.createInstance(context);
- CookieManager cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(true);
- cookieManager.removeAllCookie();
- cookieManager.setCookie(url, "sessionKey=" + UserInfoShareprefrence.getInstance(context).getLocalSessionKey());
- cookieManager.setCookie(url, "productVersion=android-epocket-v" + version);
- CookieSyncManager.getInstance().sync();
来源: http://www.qdfuns.com/article/36336/ddeb2e96233c5752f324312ae5041c67.html